Announcement

Collapse
No announcement yet.

Bindingsource.filter zum Zweiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bindingsource.filter zum Zweiten

    Hallo zusammen

    Ich habe schon die nächste Frage:
    Ich konnte nun Bewerkstelligen, dass mir eine ComboBox das DataGrid über einen Bindingsource.filter filtert mit:

    BindingSource.Filter = "Spaltenname= '" & ComboBox.Text & "'"

    Meine Frage:
    Der Filter filtert jetzt aber nur exakt nach den Combobox-Werten. Ich möchte aber in der hinterlegten Tabelle mehrere Werte angeben können und der Filter sollte die Zeilebn auch anzeigen, wenn nur ein Wert vorkommt. Also zB:

    Ich habe in einer Zelle: gelb blau rot grün
    Filtereingabe: grün
    -> dir Zeile wird trotzdem angezeigt....

    Danke für eure Hilfe

    Cookbook

  • #2
    Bei deiner ersten Frage hatte ich dich bereits darauf hingewiesen:

    Schreibe DataGridView, wenn du DataGridView meinst. DataGrid ist etwas ganz anderes, und das gibt es auch noch in doppelter Ausführung.

    Wie der Filter gebaut werden kann, steht unter DataColumn.Expression. Dort findest du auch die Antwort auf die o.g. Frage.

    Jürgen

    Comment


    • #3
      ok, datagridview

      Comment


      • #4
        Der Filter filtert jetzt aber nur exakt nach den Combobox-Werten. Ich möchte aber in der hinterlegten Tabelle mehrere Werte angeben können und der Filter sollte die Zeilebn auch anzeigen, wenn nur ein Wert vorkommt. Also zB:

        Ich habe in einer Zelle: gelb blau rot grün
        Filtereingabe: grün
        -> dir Zeile wird trotzdem angezeigt....
        Mit der Beschreibung komme ich nicht klar - keine Ahnung was du meinst. Ich rate mal:

        BindingSource.Filter = "Spaltenname like '%" & ComboBox.Text & "%'"

        bye,
        Helmut

        Comment


        • #5
          Hallo Helmut

          Danke, du hast genau richtig geraten. Die Beschreibung war wirklich etwas bescheuert. Aber es ist manchmal wirklich schwierig zu erläutern, was man eigentlich genau will.

          Auf jeden Fall funktioniert es jetzt. Vielleicht kannst du mir auch gleich noch weiterhelfen:
          Über die Bindingsource.filter Methode filtere ich die Liste zuerst einmal grob aus, um dann mit zwei weiteren Filtern (über ComboBoxen) Feinfilterung zu betreiben.

          Es löscht mir aber immer die vorherige Filterung, wenn ich erneut filtere. Wie können mehrere Filter gleichzeitig aktiv sein?

          Liebe Grüsse
          Raphael

          Comment


          • #6
            Es kann immer nur einen Filtereintrag geben, der alte wird also durch einen neuen Eintrag überschrieben und damit ungültig. Man kann aber Kriterien auch aneinanderhängen (mit AND,OR und NOT), Aggregatfunktionen verwenden (Sum:Sum,Max:Maximum,Min:Minimum,Avg:Average,Var:V ariance ,StDev:Standard deviation) und auch rechnen wie zB:

            filter = "(Maximum = 50 OR Minimum = 20) AND Weight = 30"

            oder

            filter = "Minimum > 10 AND [Product Name] NOT LIKE 'Test' "


            oder

            filter = "[Reduced Price] = [Original Price] * 0.8" (Punkt statt Komma!)


            bye,
            Helmut

            Comment


            • #7
              Danke Helmut,

              Schade, dann wird das Ganze wohl etwas komplizierter als ich gedacht habe...

              Comment


              • #8
                Hat niemand sonst noch eine Idee, wie man zwei Filter übereinander legen kann?

                Liebe Grüsse
                Cookbook

                Comment


                • #9
                  Originally posted by cookbook View Post
                  Hat niemand sonst noch eine Idee, wie man zwei Filter übereinander legen kann?
                  Rat mal, warum nicht. Es geht eben nicht!

                  Ich habe gerade untersucht, ob man mit einer DataView weiterkommt. Aber dafür gilt das gleiche wie bei der BindingSource: Ein neuer RowFilter überschreibt den bisherigen und holt sich die gefilterten Daten von der ursprünglichen DataTable, nicht von den schon gefilterten. (RowFilter basiert auf der gleichen Syntax von DataColumn.Expression.)

                  Ein ganz anderer Weg wäre, tatsächlich die aktuell gewünschte Filterung aus der Datenbank zu holen. Beim SELECT bist du viel flexibler als bei diesen Expressions. Unter Umständen wäre das wirklich vorzuziehen, auch wenn dann mehr Verkehr zwischen DB und Programm herrscht.

                  Gruß Jürgen

                  PS. Nach einer Stunde zu drängeln ist nicht sehr höflich. Du merkst doch, dass es Helfer gibt.

                  Comment


                  • #10
                    Hallo Jürgen

                    Nur weil eine Person sagt, das geht nicht, heisst das ja noch lange nicht, dass es keine Möglichkeit gibt....Und ausserdem ist das nicht gedrängelt, sondern nachgefragt...

                    Cookbook

                    Comment


                    • #11
                      Ich habe mit Filtern noch nicht allzuviel gemacht, ich fackel das immer im SQL schon ab, aber soweit ich verstanden habe kann der Filterbegriff doch einigermaßen komplex sein, oder?

                      Kann man dann nicht den ersten Filter der gesetzt wird einfach per AND an den neuen Filter der per ComboBoxen gesetzt wird dranhängen, so das er einfach beides gleichzeitig durchführt?

                      Für den User ist wichtig das das Ergebnis stimmt und der Programmierer weiß ja im Normalfall was zuerst gefiltert werden sollte und könnte so immer wieder auf den ursprünglichen Filter zurückgreifen, oder sehen ich das nun wieder zu naiv?

                      Gruß Womble

                      Comment


                      • #12
                        Hi Womble

                        Das habe ich auch schon versucht, aber ich bekomme immer eine Exception, wobei ich nach dem AND eigentlich genau den gleichen Filter verwende.

                        Wie machst du das denn im SQL? mit SQL: SELECT.... FROM... WHERE....
                        Das schaffe ich eben nicht, er nimmt irgendwie meine Bedingung nicht an....

                        Liebe Grüsse
                        Cookbook

                        Comment


                        • #13
                          Hi cookbook,

                          ich habe in einem String den fixen Teil vom SQL (alles ohne die Where Bedingung) und in einem zweiten baue ich mir dann je nach Notwendigkeit (die User können die Where Bedingung selbst zusammenklicken) eine Where Bedingung zusammen. Danach schicke ich die beiden an den DataAdapter.SelectCommand und warte auf das Ergebnis.

                          Im Grunde setze ich alle Bedingungen die kommen einfach mit AND aneinander und schneide am Schluß das letzte AND wieder ab.

                          [highlight=vbnet]
                          SQLSelect = "Select * from Tabelle1 "
                          SQLBed = "Where "
                          if Bedingung1 then
                          SQLBed = SQLBed & "Feld1 = 'Test' AND "
                          end if
                          if Bedingung2 then
                          SQLBed = SQLBed & "Feld2 = 'Bla' AND "
                          end if
                          if Bedingung3 then
                          SQLBed = SQLBed & "Feld3 = 'Sonstwas' AND "
                          end if
                          myDataAdapter.SelectCommand = SQLSelect & SQLBed.Substring(1, SQLBed.Length - 5)[/highlight]

                          Den Teil mit der Verbindung zur Datenbank und dem anlegen des DataAdapters habe ich mir geschenkt.
                          Ich gehe davon aus das Du das alles schon irgendwo hast.

                          Gruß Womble

                          Comment


                          • #14
                            Hi Womble

                            Als alleiniger Filter würde es funktionieren, aber in Kombination mit dem Filter über die Binding.source (also beide gleichzeitig) klappt es nicht. Wahrscheinlich weil über zwei verschiedene Adapter auf die Datenbank zugegriffen wird.

                            Danke trotzdem für deinen Vorschlag.

                            Cookbook

                            Comment

                            Working...
                            X