Laden...

Filter im BindingSource verknüpfen

Erstellt von sh60 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.782 Views
S
sh60 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren
Filter im BindingSource verknüpfen

Ich möchte die Filter zweier Spalten einer Datenquelle über die BindingSource verknüpfen. Wenn ich die Filter mit der Property "Filter" nacheinander setze, wird der erste Filter durch den zweiten überschrieben, d.h. nur der zweite Filter wird ausgeführt. Wenn ich die beiden Filter miteinander verknüpfe (etwa so: ...Filter = "STATUS = False AND NAME='Meier'"), wird der Filter gar nicht ausgeführt, weil wahrscheinlich nicht verstanden. Kann jemand helfen?

5.299 Beiträge seit 2008
vor 14 Jahren

Du musst dir inne MSDN die DataColumn..::.Expression Property angugge, da steht die Syntax der BindingSource.Filter-Eigenschaft (Wenn die BS an einer DataTable hängt).

Um es vorwegzunehmen: "AND" kommt in dieser Syntax nicht vor.

vlt. kommste mit folgender gräuslichkeit weiter:

...Filter = "Convert(STATUS, 'System.String')+NAME='FalseMeier'";

Der frühe Apfel fängt den Wurm.

T
111 Beiträge seit 2005
vor 14 Jahren

Hallo

Du musst die einzelnen Ausdrücke in Klammer setzen und die Hochkommas beim Wert nicht vergessen.


bs.Filter = "(Spalte1 = 'Wert') AND (Spalte2 LIKE 'Wert2%')";

lG
Thomas

S
sh60 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren
Filter im BindingSource verknüpfen

Danke für die zwei prompten Antworten.

Meine Info bzgl. der logischen Verknüpfungen stammt vom MSDN. Dort steht unter DataColumn.Expression-Eigenschaft (ungefähr inder Mitte):

Die Verkettung mit den booleschen Operatoren AND, OR und NOT ist zulässig. Sie können mithilfe von Klammern Klauseln gruppieren und den Vorrang erzwingen. Der AND-Operator hat Vorrang gegenüber anderen Operatoren. Beispiel:

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

Bei meinem Beispiel bezieht sich der erste Filter auf einen booleschen Wert und darf deshalb m.E. nicht in Hochkommas gesetzt werden. Ich denke, die Klammern brauch' ich nicht, da sie zum Gruppieren genommen werden. Einzeln funktioneren die Filter ja auch, aber leider nicht in Kombination miteinander.

5.299 Beiträge seit 2008
vor 14 Jahren

Die Verkettung mit den booleschen Operatoren AND, OR und NOT ist zulässig.

Tatesächlich, habich immer übersehen

Ich denke, die Klammern brauch' ich nicht, da sie zum Gruppieren genommen werden. Einzeln funktioneren die Filter ja auch, aber leider nicht in Kombination miteinander.

And hat Vorrang, daher brauchste doch Klammern

vlt so?


Filter = "(STATUS = False) AND (NAME='Meier')"

oder so?


Filter = "(NOT STATUS) AND (NAME='Meier')"

Der frühe Apfel fängt den Wurm.

S
sh60 Themenstarter:in
7 Beiträge seit 2009
vor 14 Jahren
Filter im BindingSource verknüpfen

Die Klammern bei der Verknüpfung brauche ich nur, wenn ich mit weiteren AND- und OR-Operatoren eine Grupperiung vornehmen will, ich hab's ausprobiert.

Zurück zum eigentlichen Problem. Ich hab' jetzt gelernt, dass man ab .Net Framework 3.5 LINQ-Abfrageausdrücke fürs Filtern verwenden kann. Besonders komfortabel soll das sein, wenn man die Where-Methode der LINQ Dynamic Query Library verwendet, da nur der Abfrage-string als Parameter benötigt wird. Ich hab' in dem Code zu dieser Library nur Methoden gefunden, die mindestens 2 Parameter benötigen:


public static IQueryable Where(this IQueryable source, string predicate, params object[] values)

Was muss ich sonst noch beachten?? Bei dem Beispiel von Scott Guthrie im Internet ist mir nicht klar, wie die Instanzen die Where-Methode der LINQ Dynamic Query verwenden. Ich hätte gedacht, dass die Instanzen direkt auf eine Where-Methode von LINQ zugreifen. Hat das etwa mit dem '_'-Zeichen zu tun?
Ich steh' anscheinend total auf dem Schlauch!