Bindingsource über Beziehung hinweg filtern

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    Bindingsource über Beziehung hinweg filtern

    Hallo liebe Gemeinde,
    es gibt wohl hunderte Beiträge zum Filtern einer Bindingsource, trotzdem bin ich nicht fündig geworden.
    Folgende Ausgangslage:
    Ein Dataset mit 3 Tabellen, die in einer m:n-Beziehung zueinander stehen.
    tbl_1 steht mit tbl_3 über ID_tbl1 in einer 1:n-Beziehung
    tbl_2 steht mit tbl_3 über ID_tbl1 in einer 1:n-Beziehung


    Gedacht ist, dass tbl_1 die Hauptansicht darstellt (Eine Sammlung von Objekten (3D-Dateien von Werkstücken mit div. Properties), die im Datagrid gefiltert werden sollen. In meinem Beispiel mit Datensätzen "A", "B", ... "E" befüllt.
    tbl_2 hält Typen (später Bearbeitungsverfahren für die Werkstücke wie Drehen, Fräsen, Zuschnitt) bereit (befüllt mit "AA", "BB"..., die über Comboboxen im Datgridview der tbl_3 den Datensätzen aus tbl_1 zugeordnet werden. Somit können später den Werkstücken jeweils eins oder mehrere Fertigungsverfahren zugeordnet werden. Ein Filter soll ermöglichen, im Datagridview nur die Datensätze aus tbl_1 anzuzeigen, denen eine bestimmte Bearbeitungen zugeordnet wurde.
    Auf meiner Fom hab ich zum Testen eine Textbox, in die ich einen Filterstring eingeben kann, welcher der Bindingsource der tbl_1 übergeben wird.
    Mein Ziel ist es, über diesen Filter alle Datensätze der tbl_1 anzuzeigen, die in tbl_3 auf einen bestimmten Eintrag aus tbl_2, also einen bestimmten "Typ", verweisen.

    Meine Versuche haben nur ermöglicht, die Anzahl der zu einem Datensatz aus tbl_1 untergeordneten Datensätze aus tbl_3 anzuzeigen
    (siehe Spalte Count_tbl3, Dort ist das als Expression hinterlegt) count(child.ID_tbl_1)
    Versuche wie count(child.ID_tbl_1)>0 and (tbl_2.ID_tbl3)='AA' schlugen mit Syntaxfehlern fehl.
    Leider hat mich auch die Microsoft-Hilfe nicht weitergebracht. Ich finde keine Möglichkeit, die untergeordneten Datensätze nach einer Zeichenfolge in einem Filter zu realisieren. Ich hatte (mit Erfolg) das Ganze über Linq realisiert. Allerdings muss man das natürlich jedesmal anstoßen. Filter sind da eleganter.

    Ich freue mich, wenn mir jemand auf die Sprünge helfen kann und ich mich verständlich ausgedrückt habe.
    Bilder
    • Dataset.png

      4,36 kB, 817×175, 37 mal angesehen
    • Form1.png

      18,73 kB, 806×490, 33 mal angesehen
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    AFAIK geht das nicht über Filter, nur über LINQ. Aber den Filter musst Du ja auch "anstoßen". Selbst das Setzen im Designer ist nur ein Stück Code, welchen Du per LINQ im Form_Load-EH ausführen könntest.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Vatter schrieb:

    Ein Filter soll ermöglichen, im Datagridview nur die Datensätze aus tbl_1 anzuzeigen, denen eine bestimmte Bearbeitungen zugeordnet wurde.
    Also du willst in tbl2 was auswählen, und dann von tbl1 nur die Datensätze sehen, die über tbl3 mit den ausgewählten tbl2-Datensätzen verknüpft sind?

    Ja, ist lausig - geht nicht mit Standard-Filtern.
    Zunächst mal würde ich prüfen, ob es nicht einfacher geht. Also dass du tbl3 anzeigst, und mit lauter Combobox-Columns da Werte aus tbl1 "hineinholen".
    Wenn man für jede tbl1-Spalte eine ComboColumn anlegt, dann sieht dgv3 so aus, als sei es ein tbl1-view - ist aber in Wirklichkeit ein tbl3-View, der nur lauter verknüpfte Werte anzeigt.
    Also ist etwas anderes, als was du bestellt hast. Ist zB alles readonly. Und wenns mehrere Verknüpfungen zum selben tbl1/tbl3-Datensatz gibt, erscheint das als Dopplung.

    Wie dem auch sei.
    In LinqToDataset stelle ich die LinqToDataset-Technologie vor.
    Mit ein paar Klimmzügen kann man damit solche Filter hinbasteln (und ist auch gezeigt wie).
    Vielen Dank Euch beiden für die schnelle Antwort. Dann hab ich zumindest nicht zu sehr aufm Schlauch gestanden. Bin noch etwas eingerostet, weil ich jahrelang nix mit VB gemacht hab.

    Ich werds dann mit Linq tun.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: