none
Mehrere Filter übereinander legen RRS feed

  • Frage

  • Guten Tag

    Ist es möglich, zwei oder mehrere BindingSource.Filter übereinander zulegen, die über dieselbe BindingSource laufen?
    Wenn nicht, gibt es sonst eine Möglichkeit, ein DataGridView mehrfach zu filtern?

    MfG
    Pterois
    Montag, 15. Februar 2010 19:13

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
    Samstag, 20. Februar 2010 13:52
    Moderator
  • 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
    Samstag, 20. Februar 2010 19:44

Alle Antworten

  • Hi,
    Ist es möglich, zwei oder mehrere BindingSource.Filter übereinander zulegen, die über dieselbe BindingSource laufen?
    Wenn nicht, gibt es sonst eine Möglichkeit, ein DataGridView mehrfach zu filtern?
    bist Du sicher, dass Du im ASP.NET Bereich richtig bist?

    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
    Montag, 15. Februar 2010 20:18
    Moderator
  • Hallo Pterois,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Freitag, 19. Februar 2010 12:16
    Moderator
  • 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
    Freitag, 19. Februar 2010 20:37
  • 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)..
    Es wäre aber trotzdem schön, wenn ich es auch mit der bindingsource zum Laufen bekäme..
    könntest Du evtl. noch auf die Fragen eingehen? Wirklich ASP.NET?

    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
    Freitag, 19. Februar 2010 21:55
    Moderator
  • ¨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
    Freitag, 19. Februar 2010 22:09
  • 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
    Samstag, 20. Februar 2010 13:52
    Moderator
  • 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
    Samstag, 20. Februar 2010 19:44
  • 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

    Danke vielmals für deine sehr kompetente und schnelle Hilfe.
    Das freut mich für dich. Und bei den nächsten Fragen einfach wieder melden :)


    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
    Sonntag, 21. Februar 2010 00:06
    Moderator