Listview vergleichen

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

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

    Listview vergleichen

    Hallo, ich habe eine Listview in der eine Spalte mit mehreren Einträgen ist.
    Nun habe ich einen String aus einer Mysql Datenbank der mehrere Werte mit einem Trennzeichen enthält.

    Wie bekomme ich es nun hin das er den String mit den Einträgen der Listview vergleicht und bei den Items die gleich sind die Checkbox aktiv setzt.?

    Hoffe das mir jemand helfen kann.
    Willkommen im Forum.
    Kleiner Tipp zum Anfang: Ersetze das ListView gegen ein DataGridView. Du ersparst allen Beteiligten viel Frust.
    Den DB-String teilst Du erstmal in seine Bestandteile auf, siehe DeinString.Split(DeinTrennzeichenAlsChar).
    Dann gehst Du alle Spalteneinträge in Deinem ListView DGV durch und machst den Einzelnvergleich.

    FunkspielOldenburg schrieb:

    und bei den Items die gleich sind die Checkbox aktiv setzt
    Was'n für ne CheckBox? Gibt es eine auf dem ganzen Form oder in jeder Zeile Deiner Anzeigentabelle eine CheckBox oder wo? Ggf. bitte Screenshot über [+ Erweiterte Antwort] zur Verfügung stellen.
    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.

    Quellcode

    1. Private Sub ToggleCheckListViewItems(ByVal target_listview As ListView)
    2. For Each lvItem As ListViewItem In target_listview.Items
    3. If lvItem.Text.Contains(schleifen) Then
    4. lvItem.Checked = True
    5. Else
    6. lvItem.Checked = False
    7. End If
    8. Next
    9. End Sub


    Das ist nun der folgende Code, leider funktioniert das nur wenn ein Eintrag im String vorhanden ist.
    Kann mir jemand sagen wie ich dort das nun hinbekomme das er da ein Array überprüft?


    Hab nun das mit dem array eingefügt, nur erkennt er nun den letzten eintrag im array

    Quellcode

    1. arr = Split(schleifen, ",")
    2. For i = 0 To arr.Length - 1 ' -1 da
    3. For Each lvItem As ListViewItem In target_listview.Items
    4. If lvItem.Text.Contains(arr(i)) Then
    5. lvItem.Checked = True
    6. Else
    7. lvItem.Checked = False
    8. End If
    9. Next
    10. Next

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FunkspielOldenburg“ ()

    Entferne mal bitte den VB6-Namespace und dann arbeite mit der Split-Variante, die ich verlinkt habe: Dim arr = schleifen.Split(","c)

    FunkspielOldenburg schrieb:

    nur erkennt er nun den letzten eintrag im array
    Weil Deine Codelogik nicht stimmt. Nur der Vergleich zwischen dem letzten arr-Item und dem letzten SubItem hat Auswirkungen auf die CheckBox, da alle anderen überschrieben werden. Angenommen, dass Du in Deinem 1. lvitem.Text alle Übereinstimmungen hast. Dann wird das Häkchen gesetzt und bleibt. Auch der Rest bis auf das letzte SubItem passt. Und dann aber das letzte SubItem: In lvitem.Text hast Du den Text "ABC" drinstehen hast. Und arr besteht aus "A", "B" und "1". Dann wird geschaut, ob in ABC das A drinsteckt. Wenn ja, dann wird die CheckBox abgehakt, wenn nicht, wird der Haken weggenommen. A ist drin -> Haken rein (bzw. Haken bleibt). Das gleiche mit B. B ist drin, also Haken rein. Ok, der ist schon gesetzt, also keine Veränderung. Das gleiche mit 1. 1 ist aber nicht drin. Also wird der Haken rausgenommen. Daher spielt es bei Deinem Code keine Rolle, ob es sonstige Übereinstimmungen gab.

    Lösung: Setze eine Boolean-Variable vor der Schleife auf False. Dann gehst Du mit Deiner Schleife durch. Und wenn es eine Übereinstimmung gibt, setz die Variable auf True und verlasse die Schleife. Und dann setzt Du für das ListViewItem die Checked-Property auf den Wert der Variable -> Wenn es gar keine Übereinstimmungen gibt, gibt es keinen Haken, wenn es mindestens eine Übereinstimmung gibt, wird der Haken für dieses ListViewItem gesetzt.

    btw: Hatte ich schon erwähnt, dass Du besser ein DGV nehmen solltest?
    Und:

    FunkspielOldenburg schrieb:

    ' -1 da
    Fehlt Dir noch ne Begründung?
    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.