.NET BindingSource.Filter mit regulären Ausdrücken
ich bin mit BindingSource.Filter, um die Liste nur bestimmte Elemente der Datenquelle.
vor allem benutze ich es wie dieser eine Menge:
m_bindingSourceTAnimation.Filter = "Name LIKE '" + FilterText + "'";
nun meine Frage ist, ob es irgendwie möglich ist die Verwendung regulärer Ausdrücke, die mit diesen filtern.
ich würde vor allem brauchen mehrere Platzhalterzeichen (*) Charaktere, wie
*hello*world*
Dank!
- Was ist die zugrunde liegende Datenquelle? Ein
DataTable
? Ein List<T>? etc - Die Bearbeitung mit einem alternativen...
- ja, es ist eine "DataTable"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Abfrage der DataTable mit LINQ Recht einfach und dann können Sie mit einer eigentlichen Regex innerhalb der Abfrage zu filtern, wie auch immer Sie mögen.
Sowas...
Diese erhalten Sie die Zeilen, die übereinstimmen, basierend auf einem tatsächlichen Regex, ich weiß nicht, was Sie tun müssen, um mit den Informationen, aber das würde Ihnen erlauben, Holen Sie sich die Zeilen anhand einer Regex.
****Update** - Versuchen zu klären, basierend auf Kommentar
Ich weiß nicht, was Sie mit diesem für, so dass ich nicht in einen großen Zusammenhang, aber von dem, was ich denke, können Sie mit einer DataTable an Daten binden Sie an ein Gitter oder sowas. Wenn dies der Fall ist, ich denke, Sie sollten in der Lage sein zu vergeben "Liste" aus dem snippet habe ich hier als Datenquelle (vorausgesetzt, Sie verwenden eine BindingSource) und ich denke, dass es funktionieren wird. Ich glaube nicht, verwenden DataTables, ich halte mich normalerweise für Objekte, die für das arbeiten mit meinen Daten also ich bin nicht ganz sicher, wie es mit der Liste von Zeilen, aber ich würde denken, es würde funktionieren (oder nahe genug sein, dass eine kleine google-Suche würde es tun).
BindingSource
setzt aufIBindingListView.- Filter
für diese Funktionalität. Das Verhalten hängt ganz auf der Liste Umsetzung. Ist das einDataTable
/DataView
? Wenn ja, diese Karten zuDataView.RowFilter
, mit syntax aufgeführt hier.Den
DataView
Umsetzung hat keine regex-Unterstützung, unterstützt aberLIKE
über*
- also dort, woFilterText
ist so etwas wie"Foo*Bar*"
. Zumindest ist das mein Verständnis.Ich bin immer noch davon aus, dass du mit
DataTable
/DataView
... eine pragmatische alternative könnte die Einführung einer zusätzlichen (bool) - Spalte für den Zweck. Setzen/löschen marker als Prädikat (mit einem regex oder andere komplizierte Logik), und benutzen Sie einfach die Zeile-filter zu sagen, wo "set". Nicht sehr sauber, vielleicht, aber viel einfacher als die Implementierung von benutzerdefinierten Daten-Ansicht /binding-Quelle.Wenn Sie Objekte (anstatt
DataTable
), dann eine andere option könnte sein, die Dynamische LINQ-Library. Ich weiß nicht, die volle Bandbreite von dem, was es unterstützt, aber es (Where(string)
) hat sicherlich einige /viel von derRowFilter
Fähigkeit. Und da der code ist im sample-Projekt, es ist möglich könnten Sie erziehen Sie zum anwenden einer regex?Den Kommentar unten funktioniert nicht wirklich:
"...eine pragmatische alternative könnte die Einführung einer zusätzlichen (bool) - Spalte für den Zweck. Setzen/löschen marker als Prädikat (mit einem regex oder andere komplizierte Logik), und benutzen Sie einfach die Zeile-filter zu sagen, wo "set". Nicht sehr sauber, vielleicht, aber viel einfacher als die Implementierung von benutzerdefinierten Daten-Ansicht /binding-Quelle".
Wenn Sie die neue Spalte dies bewirkt, dass die Zeile Status zu ändern und Sie im Grunde am Ende mit die ganze Tabelle/dataview denken, dass es muss jede Zeile mit dem nächsten update.
Nicht sicher, wie Sie dieses problem umgehen.
Ich löste dieses Problem durch die Spaltung der Suchbegriff durch den Platzhalter und dann erstellt die Zeile filter-Ausdruck über die split-Werte.
Wenn Sie mit mehreren Platzhalterzeichen könnten Sie eine rekursive Funktion, die schafft der filter-Ausdruck