Remove all selected rows from a datagrid view

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Remove all selected rows from a datagrid view

    Hi,

    Ich habe eine sehr einfache Aufgabe: ich möchte alle selektierten Zeilen einer Datagrid View löschen (multiselect=TRUE).

    Ich kann alle Zeilen durchlaufen und immer dann löschen, wenn die Zeile selektiert ist:

    VB.NET-Quellcode

    1. For k = 0 To DgvSubdirList.RowCount - 1
    2. If DgvSubdirList.Rows(k).Selected = True Then
    3. DgvSubdirList.Rows.RemoveAt(k)
    4. End If


    Klar, das funktioniert nicht, weil nach dem ersten Löschen der Count kleiner wird und damit die Schleife "zu weit" läuft.

    Nächster Ansatz:

    VB.NET-Quellcode

    1. For k = DgvSubdirList.RowCount - 1 To 0 Step -1
    2. If DgvSubdirList.Rows(k).Selected = True Then
    3. DgvSubdirList.Rows.RemoveAt(k)
    4. End If
    5. Next


    Das ist schon besser. Aber ...

    ... aber wenn man nur die letzte Zeile selektiert, dann werden ALLE Zeilen gelöscht. Nach dem Löschen der letzten Zeile selektiert .NET die "neue" letzte Zeile ... und damit beißt sich die Katze in den Schwanz ! :)

    Man müsste also wohl erst mal all Selektierungen extrahieren, diese Liste absteigend sortieren und dann die Zeilen in dieser Reihenfolge löschen.

    VB.NET-Quellcode

    1. Dim IndexList = DgvSubdirList.SelectedRows


    Aber wie sortiere ich denn das Dingens jetzt. Das ist eine Collection ... und irgendwie finde ich da keine Sort Methode. Klar könnte ich die selektierten Indexes in eine List of Integer extrahieren und dann sortieren ... aber das scheint mir sehr umständlich zu sein.

    Bin ich überhaupt auf dem richtigen Weg ? Oder geht das vielleicht sogar viel einfacher ?

    LG
    Peter
    Scheitert was am Klassiker?

    VB.NET-Quellcode

    1. Dim RowsToDelete = DataGridView1.SelectedRows.Cast(Of DataGridViewRow).ToArray
    2. For Each RowToDelete In RowsToDelete
    3. DataGridView1.Rows.Remove(RowToDelete)
    4. Next


    ##########

    oder gekürzt:

    VB.NET-Quellcode

    1. For Each RowToDelete In DataGridView1.SelectedRows.Cast(Of DataGridViewRow).ToArray
    2. DataGridView1.Rows.Remove(RowToDelete)
    3. Next


    oder noch weiter gekürzt, aber etwas unübersichtlicher:

    VB.NET-Quellcode

    1. DataGridView1.SelectedRows.Cast(Of DataGridViewRow).ToList.ForEach(Sub(x) DataGridView1.Rows.Remove(x))
    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.