Benutzer mit den meisten Antworten
Mehrere Filter übereinander legen

Frage
Antworten
-
Hallo Pterois,
Nicht wirklich ASP.NET. Eigentlich VB.NET, aber die bindingsource.filter-klasse gibts ja bei beidem und die handhabung im datagrid view wie dataadapter ist auch ungefähr gleich, oder? (bitte belehrt mich, wenn ich total daneben liege. :-))
*korrigier* Es ist schon ein Unterschied. Wenn eine DataTable dahinter steht, dürfte zwar der Filter gleich aussehen dürfen aber ansonsten hat das nicht viel mit dem gemeinsam, was man in ASP.NET so macht.
Also: Ich versuche die Filterbedingungen so aneinanderzuhängen:
Aua, was ist das denn? Wenns nicht nur an der Formatierung hier im Editor liegt, würd ich das mal "ein wenig" leserlicher gestalten.
...
Im ersten Schritt kannst Du bspw. einfach mal einen festen Wert für den Filter angeben.
BindingSource.Filter = "Spaltenname1 <= 5 AND Spaltenname2 LIKE '%Abc%'"
Spaltenname1 sollte dann natürlich auch numerisch sein. Wenn das nicht der Fall ist, setz Hochkommata '...' drum rum.
Wenn das nicht klappt, wird die dahinterliegende Datenquelle das nicht unterstützen. Wenn es klappt, ist dein Statement falsch. in dem Fall probier mal das hier:
BindingSource.Filter = String.Format( "Spaltenname1 <= {0} AND Spaltenname2 LIKE '%{1}%'", TextBox1.Text, ComboBox1.Text )
Wichtig wäre aber mal noch zu wissen, was eigentlich hinter deiner BindingSource steckt. DataTable?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Montag, 22. Februar 2010 10:51
-
Hoi Stefan
Sorry, die Formatierung lag am Editor. Und es war schon später....hehe
Ja hinter der BindingSource liegt eine DataTable.
Ich kann eben keinen festen Wert für den ersten Filter einsetzen, da sich dieser Wert nach einem Textfeld richtet. dieses Textfeld zeigt einen nummerischen Wert an, der je nach Eingabe ändert. Der zweite Wert ist nicht nummerisch.
Ich habe jetzt deine zweite Möglichkeit getestet:
Das gibt mir zwar keinen Fehler aus und filtert auch was raus, aber es zeigt mir immer nur eine datarow in der view an und bei gewissen einstellungen auch keine, obwohl etwas angezeigt werden sollte....
Ich habe dann die statements umgedreht:
BindingSource.Filter = String.Format("Spaltenname2 LIKE '%{0}%' and Spaltenname1 <= {1}", ComboBox1.Text, TextBox1.Text)
Und jetzt klappts.....Juhuiii
Danke vielmals für deine sehr kompetente und schnelle Hilfe.
Ich melde mich gerne wieder, wenn weitere Fragen auftauchen......:-)
Liebe Grüsse
Pterois- Als Antwort markiert Robert BreitenhoferModerator Montag, 22. Februar 2010 10:51
Alle Antworten
-
Hi,
Ist es möglich, zwei oder mehrere BindingSource.Filter übereinander zulegen, die über dieselbe BindingSource laufen?
bist Du sicher, dass Du im ASP.NET Bereich richtig bist?
Wenn nicht, gibt es sonst eine Möglichkeit, ein DataGridView mehrfach zu filtern?
Grundsätzlich kannst Du einen Filter so setzen (die genaue Syntax ist u.a. vom dahinterliegenden Objekt abhängig):
...Filter = "Spalte1 = 'Wert1' AND Spalte2 = 'Wert2'"
Da diese Frage hier deiner entspricht, würde ich mal sagen, dass Du die Filter Eigenschaft deines Controls erweitern musst. Mehrere Filter sind so AFAIK nicht möglich.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 19. Februar 2010 12:16
-
Hallo Robert,
Nein, ich bin immer noch am probieren. Wenn ich zwei Bedingungen an die bindingsource.filter-methode hänge, bekomme ich immer eine Fehlermeldung. Vielleicht sind die Bedingungen zu komplex. Ich versuche es jetzt einfach mit einer sql-abfrage. (select from where)..
Es wäre aber trotzdem schön, wenn ich es auch mit der bindingsource zum Laufen bekäme..
Danke für die Nachfrage!
Grüsse
Pterois -
Hallo Pterois,
Nein, ich bin immer noch am probieren. Wenn ich zwei Bedingungen an die bindingsource.filter-methode hänge, bekomme ich immer eine Fehlermeldung. Vielleicht sind die Bedingungen zu komplex. Ich versuche es jetzt einfach mit einer sql-abfrage. (select from where)..
könntest Du evtl. noch auf die Fragen eingehen? Wirklich ASP.NET?
Es wäre aber trotzdem schön, wenn ich es auch mit der bindingsource zum Laufen bekäme..
Ein Beispiel für deinen Filter und die genaue Fehlermeldung wären sicherlich ebenfalls hilfreich.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
-
¨Hallo Stefan
Nicht wirklich ASP.NET. Eigentlich VB.NET, aber die bindingsource.filter-klasse gibts ja bei beidem und die handhabung im datagrid view wie dataadapter ist auch ungefähr gleich, oder? (bitte belehrt mich, wenn ich total daneben liege. :-))
Also: Ich versuche die Filterbedingungen so aneinanderzuhängen:
BindingSource.Filter = "Spaltenname1 <= " + textbox.text AND "Spaltenname2 LIKE '%" & Combobox.text & "%'"
aber ich bekomme folgenden Fehler:
-InvalidCastException was unhandled. Conversion from string "Spaltenname1 <= Wert (Der Wert der textbox) to type 'Long' is not valid.
Ich denke, dass ich irgend etwas in der Syntax nicht korrekt habe. Wenn ich die Bedingungen einzeln habe, funktioniert das tadellos...
Danke für eure Hilfe
Pterois -
Hallo Pterois,
Nicht wirklich ASP.NET. Eigentlich VB.NET, aber die bindingsource.filter-klasse gibts ja bei beidem und die handhabung im datagrid view wie dataadapter ist auch ungefähr gleich, oder? (bitte belehrt mich, wenn ich total daneben liege. :-))
*korrigier* Es ist schon ein Unterschied. Wenn eine DataTable dahinter steht, dürfte zwar der Filter gleich aussehen dürfen aber ansonsten hat das nicht viel mit dem gemeinsam, was man in ASP.NET so macht.
Also: Ich versuche die Filterbedingungen so aneinanderzuhängen:
Aua, was ist das denn? Wenns nicht nur an der Formatierung hier im Editor liegt, würd ich das mal "ein wenig" leserlicher gestalten.
...
Im ersten Schritt kannst Du bspw. einfach mal einen festen Wert für den Filter angeben.
BindingSource.Filter = "Spaltenname1 <= 5 AND Spaltenname2 LIKE '%Abc%'"
Spaltenname1 sollte dann natürlich auch numerisch sein. Wenn das nicht der Fall ist, setz Hochkommata '...' drum rum.
Wenn das nicht klappt, wird die dahinterliegende Datenquelle das nicht unterstützen. Wenn es klappt, ist dein Statement falsch. in dem Fall probier mal das hier:
BindingSource.Filter = String.Format( "Spaltenname1 <= {0} AND Spaltenname2 LIKE '%{1}%'", TextBox1.Text, ComboBox1.Text )
Wichtig wäre aber mal noch zu wissen, was eigentlich hinter deiner BindingSource steckt. DataTable?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Montag, 22. Februar 2010 10:51
-
Hoi Stefan
Sorry, die Formatierung lag am Editor. Und es war schon später....hehe
Ja hinter der BindingSource liegt eine DataTable.
Ich kann eben keinen festen Wert für den ersten Filter einsetzen, da sich dieser Wert nach einem Textfeld richtet. dieses Textfeld zeigt einen nummerischen Wert an, der je nach Eingabe ändert. Der zweite Wert ist nicht nummerisch.
Ich habe jetzt deine zweite Möglichkeit getestet:
Das gibt mir zwar keinen Fehler aus und filtert auch was raus, aber es zeigt mir immer nur eine datarow in der view an und bei gewissen einstellungen auch keine, obwohl etwas angezeigt werden sollte....
Ich habe dann die statements umgedreht:
BindingSource.Filter = String.Format("Spaltenname2 LIKE '%{0}%' and Spaltenname1 <= {1}", ComboBox1.Text, TextBox1.Text)
Und jetzt klappts.....Juhuiii
Danke vielmals für deine sehr kompetente und schnelle Hilfe.
Ich melde mich gerne wieder, wenn weitere Fragen auftauchen......:-)
Liebe Grüsse
Pterois- Als Antwort markiert Robert BreitenhoferModerator Montag, 22. Februar 2010 10:51
-
Hallo Pterois,
Ich kann eben keinen festen Wert für den ersten Filter einsetzen, da sich dieser Wert nach einem Textfeld richtet.
Das war eigentlich auch nur zum testen gedacht, ob es denn überhaupt funktioniert. Und da kannst Du ganz bestimmt einen festen Wert einbauen :)Und jetzt klappts.....Juhuiii
Das freut mich für dich. Und bei den nächsten Fragen einfach wieder melden :)
Danke vielmals für deine sehr kompetente und schnelle Hilfe.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community