DataSet mit auswahlmöglichkeiten einschränken

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    DataSet mit auswahlmöglichkeiten einschränken

    Servus Leute,

    ich hab ein Problem bzw. stehe gerade ein bisschen auf den Schlauch....

    Ich hab ein Dataset. In diesem Dataset sind ein Paar Viele Spalten enthalten:


    Die ersten 4 Spalten sind strings, alle anderen sind Boolean.

    Ich will Später die Tabelle filtern können, in dem ich die Booleanwerte auswähle bzw. sage, das diese True sein sollen.
    Ich hoffe, ich habe das richtig rüber gebracht...

    z.B. ich setze den Wert von "Solar" auf true. dann sollen mir nur die Daten angezeigt werden, welche den Wert "Solar" auch auf true haben. wenn ich dann den Wert BHKW auf "true" setze, sollen mir nur die Daten angezeigt werden, welche bei "Solar" und "BHKW" den wert True haben.
    Das geht wohl mit ner Bindingsource und nem entsprechende Filter.

    docs.microsoft.com/de-de/dotne…ource.filter?view=net-5.0
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Oder per LINQ-Filterung, siehe ein altes Thema von mir.
    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.
    ich hab es jetzt mittels der Bindingsource gemacht. Wenn ich aber jetzt z.B. nach den gas, wandhängenden Geräten Filtere und dann noch ob es eine Kaskade ist oder nicht, wird mir bei Setzen von dem Häckchen in der Kaskade wieder alle Möglichkeiten angezeigt, welche mit Kaskade "True" eingetragen worden sind. Unabhängig davon, ob ich gas, wandhängend ausgewählt habe oder nicht.Die in der Spalte "Leistungsgroesse" stehenden Werten müssten mit den in der Combobox gezeigten Werte übereinstimmen. Dies tun sie leider nicht, da beim setzen des Hakens der Komplette filter überschrieben wird. Aber ich müsste in dem Bindingsource weitersuchen. Sprich, es müssen alle Filter zur selben zeit aktiv sein, so das eine "UND" verkettung entsteht bei der Abfrage. aber eben alles einzelnd
    Mach Dir eine ItemMatchesToFilters-Prozedur. Damit ergibt sich als Beispiel:

    VB.NET-Quellcode

    1. Private Sub ApplyFilters()
    2. Dim ItemsToShow = Items.Where(Function(x) ItemMatchesToFilters(x, {(x.HangsOnWalls, CheckBox1.Checked), (x.StandsOnTheGround, CheckBox2.Checked), (x.IsHeatPump, CheckBox3.Checked}) AndAlso ItemMatchesToFilters(x, {(x.Cascase, CheckBox4.Checked), (x.BioMass, CheckBox5.Value), (x.Solar, CheckBox6.Checked), (x.BHKW, CheckBox7.Checked)}) AndAlso …).ToList
    3. DGV.DataSource = ItemsToShow
    4. End Sub
    5. Private Function ItemMatchesToFilters(Item As Item, Possibilities As IEnumerable(Of (ActualValue As Boolean, ShallBeValue As Boolean)))
    6. Return Possibilities.Any(Function(x) x.ActualValue AndAlso x.ShallBeValue)
    7. End Function
    Kommt natürlich stark auf Deine ItemProperties an. Wenn die RadioButtonBlock-Optionen alle exklusive sind, sollte sich das auch in den ItemProperties widerspiegeln, also nicht alle als 5 Booleans für Block 1 angelegt sein, sondern als 1 Integer, damit das exklusive ist.
    Es kann ja z.B. nicht freischwebend Gas mit bodenständig Öl zutreffen. Oder?
    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.

    trix0 schrieb:

    Sprich, es müssen alle Filter zur selben zeit aktiv sein, so das eine "UND" verkettung entsteht bei der Abfrage. aber eben alles einzelnd
    Ja - und was ist das Problem?
    Musst dir halt eine Methode schreiben, die das tut.
    Vaporized scheint da iwas mit Linq gebastelt zu haben - wenn du einen BindingSource-Filter setzen willst, wären eher Strings zu verketten (mit " AND " dazwischen).
    Vlt. wäre sinnvoll, du postest mal die Methode, die du bissher hast.
    Wenn ich mir das hier aus @mrMos Beitrag ansehe:

    C#-Quellcode

    1. //The Filter string can include Boolean expressions.
    2. source1.Filter = "artist = 'Dave Matthews' OR cd = 'Tigerlily'";

    Würde ich behaupten man kann einen entsprechenden Parser bauen, der diese Verknüpfung (string Filter) realisiert, in Abh. zu ggf. Voreinstellungen?!
    Erstmal muss das Datenmodell passen. Ich kann mir nicht vorstellen, dass alle Boolean-Bedingungen aus Post#1 für ein Etwas gleichzeitig zutreffen können. Sobald man in einzelnen Tabellen zusammengefasst hat, was sich gegenseitig ausschließt, kann man die Filter deutlich durch den Einsatz von ComboBoxen auf dem GUI vereinfachen. Und: Ja, ich verzichte grundsätzlich auf die FilterProperty der BS. Ich bevorzuge immer LINQ.
    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.