Dynamischer Filtergenerator für Bindingsource

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von KSE.

    Dynamischer Filtergenerator für Bindingsource

    Hallo zusammen,

    ich habe eine Bindingsource, die in einem Datagridview angezeigt wird. Es handelt sich um > 250 Spalten (Join verknüpft aus Datenbank).

    Jetzt möchte ich, dass der Benutzer nach beliebigen Spalten filtern kann. >, <, zwischen etc.

    Bei diesen extremen Filterungsmöglichkeite möchte ich auch die Option mit anbieten, dass der Benutzer seinen Filter unter einem Namen abspeichern kann.

    Hat jemand von euch schon mal so einen dynamischen Filter gebaut?
    Gruß von der KSE

    ks-entwicklung.de
    Das sollte doch mit dem ConnectionString gemacht werden können.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich hol mir als erstes die gesamten Daten von der Datenbank, weil der Benutzer grundsätzlich alle Daten sehen soll. Das Filtern ist optional.

    Ich habe jetzt mal ein Bild gemacht, wie ich mir das vom Prinzip vorstelle.

    Ich hoffe dann ist es verständlicher was ich will.
    Bilder
    • Beispiel_Filtergenerator.png

      42,17 kB, 977×282, 204 mal angesehen
    Gruß von der KSE

    ks-entwicklung.de
    Beim Starten der Suche setzt du dir aus deinen Eingaben den Filterstring zusammen und übergibst ihn der Bindingsource.Filter-Eigenschaft.
    Schau mal hier rein. Da gibs auch nen Link zur Syntax von Expressions

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    KSE schrieb:

    Es handelt sich um > 250 Spalten (Join verknüpft aus Datenbank).
    Grundgütiger!
    Wer soll den Datensätze mit 250 Spalten angugge! ;(

    Jetzt möchte ich, dass der Benutzer nach beliebigen Spalten filtern kann. >, <, zwischen etc.
    Bei diesen extremen Filterungsmöglichkeite möchte ich auch die Option mit anbieten, dass der Benutzer seinen Filter unter einem Namen abspeichern kann.

    Das erfordert ein entsprechendes spezielles Datenmodell für die Filter-Ausdrücke.
    Vorschlag - folgende Tabellen:
    FilterSpalte: Auswahl der Spalten, nach denen gefiltert werden kann
    Comparer: >, <, >=, <=, =, Like
    BoolOperator: And, Or

    Filter: Parent-Table der FilterSegmente
    FilterSegment: jeder Datensatz verknüpft eine FilterSpalte, einen Comparer, einen BoolOperator mit einem "CompareValue" (Name einer in dieser Tabelle enthaltenen Spalte)

    Relationen:
    Filter->FilterSegment
    FilterSpalte->FilterSegment
    Comparer->FilterSegment
    BoolOperator->FilterSegment

    Dann kann man einen Filter anwählen, und FilterSegmente adden/bearbeiten
    Dazu einen Button, der den Filter auf die BindingSource anwendet, also alle FilterSegmente des gewählten Filters abruft, zusammenfrickelt und der BindingSource andreht
    Hat jemand von euch schon mal so einen dynamischen Filter gebaut?
    Jo.

    Übrigens ist dein Konzept unzulänglich. Es reicht nicht, FilterSegmente einfach nur mit And, Or, Not (?) zu verknüpfen, sondern man muß auch eine Klammer-Setzung eingeben können, denn

    Segment1 And (Segment2 Or Segment3)
    ergibt was anneres als
    Segment1 And Segment2 Or Segment3
    @Erfinder des Rades, dein Beitrag muss ich mir erst noch zwei, drei mal durchlesen bis ich alles verstanden habe ^^ .

    Das war ja jetzt nur mal mein erster Gedankengang. Meine Kollegen brauch so eine Filtermöglichkeit ....
    Gruß von der KSE

    ks-entwicklung.de
    @ErfinderdesRades:

    Hast du das so gemeint?

    Wenn ja, wie setzte ich dann mehrere Spalten/ gleiche Spalten mit AND/Or zusammen ?

    Danke!
    Dateien
    Gruß von der KSE

    ks-entwicklung.de
    Fast.

    Es fehlt die Tabelle Filter, die den FilterSegmenten auch übergeordnet ist.

    Und was ich nicht verstehe, warum bei Filtersegment.BoolOperator keine Fremdschlüssel eingetragen sind. Wie soll ein FilterSegment nun wissen, wie es mit dem nächsten Segment verknüpft werden soll: mit And oder mit Or ?

    Was ich auch nicht verstehe ist, warum du das in Excel darstellst, anstatt mittm DatasetDesigner.
    Hast recht! Jetzt hab ich auch kapiert, wie die Zusammensetzung der Spalten funktioniert ^^ . Bei dem zweiten Datensatz der Filtersegment- Tabelle darf aber keine Boolverknüpfung drin stehen, da die Abrfage ja nur heißen soll : Spalte 1 < 10 AND Spalte 1 > 3 .

    Was ich jetzt noch immer nicht ganz verstehe wie ich die Datensätze in Tabellen Filtersegmenten mit der Tabelle Filter verknüpfe.

    Ich habe die Ansicht mal aktualisiert.

    Gute Frage, wieso ich es nicht gleich im DatasetDesigner mache 8| !
    Dateien
    Gruß von der KSE

    ks-entwicklung.de

    KSE schrieb:

    Was ich jetzt noch immer nicht ganz verstehe wie ich die Datensätze in Tabellen Filtersegmenten mit der Tabelle Filter verknüpfe.

    Über Schlüsselspalten - ebenso, wie du die anneren Tabellen damit verknüpft hast.

    Aber überlass die Choose doch deinem Kollegen.
    Weil wie gesagt: Das Datenmodell ist unzureichend, weil keine Klammersetzung modelliert ist.
    Und eine Tabelle mit über hundert Spalten ist üblicherweise Idiotie (kann natürlich Ausnahmen geben).

    Ein richtiger Generator für logische Ausdrücke müsste als Designer für Graphen implementiert sein, wie mans von elektrischen Schaltplänen kennt: parallel geschaltete Ausdrücke sind Oder-verknüpft, Reihenschaltungen stellen Und-Verknüpfungen dar.
    @ErfinderdesRades: Also erstmal herzlichen Dank für die Brotkrümel, die mich dann ans Ziel gebracht haben. Es reicht meinen Kollegen aus, wenn sie lediglich UND verknüpfen und Bereich darüber festlegen könne. Aber das Datenmodell finde ich klasse um individuelle Filter zu generieren. Jetzt muss ich mir nur noch überlegen, wie ich es visualisiere.
    Gruß von der KSE

    ks-entwicklung.de