Datagridview - Event gesucht - nach dem Wechsel eines Checkbox-Haken

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Datagridview - Event gesucht - nach dem Wechsel eines Checkbox-Haken

    Moin!

    ich habe ein Datagridview mit Daten und in der ersten Spalte ist eine Checkbox.

    Nun möchte ich nach jedem de/aktivieren eines Checkbox-Haken die Anzahl auswerten.

    Alle von mir bisher versuchten Eventes werden wohl zum falschen Zeitpunkt ausgelöst, weil die Anzahl in meiner Auswertung nicht passt.

    Hier meine Auswertefunktion:

    VB.NET-Quellcode

    1. Dim DVGRow As DataGridViewRow
    2. _TotalCountRecordSelected = 0
    3. For Each DVGRow In DataGridView.Rows
    4. If CType(DVGRow.Cells(0).Value, Boolean) = True Then
    5. _TotalCountRecordSelected += 1
    6. End If
    7. Next


    Kann mir jemand weiterhelfen?

    Gruß jan
    Moin!

    erst einmal danke an alle Rückmeldungen.

    Ich habe das mit dem CellChanged-Ereignis ausprobiert.

    Es wird auch reagiert, aber die anschließende Auswertung mit dem o.g. Code führt nicht zu dem gewünschten Ergebnis, weil wohl zu dem Zeitpunkt der Event-Auslösung noch nicht der aktuelle Status in den Check-Boxen angekommen ist. Es wird dann immer eine Zeile zuwenig / zuviel gezählt.

    ????

    Gruß Jan
    Ich hab mit mein Projekt noch einmal genauer angeschaut. Ich hab zusätzlich zum CellValueChanged-Event noch das .CurrentCellDirtyStateChanged-Event verwendet.
    Hier ein Beispiel:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim CheckedTotal As Integer = 0
    3. Dim RowsTotal As Integer = 0
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    5. For i As Integer = 0 To 19
    6. Me.DGV1.Rows.Add(True, Guid.NewGuid.ToString().Replace("-", ""), $" Datei {i:N2}")
    7. Next i
    8. CountRows(DGV1)
    9. End Sub
    10. Sub DGV1_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DGV1.CurrentCellDirtyStateChanged
    11. If DGV1.IsCurrentCellDirty Then
    12. DGV1.CommitEdit(DataGridViewDataErrorContexts.Commit)
    13. End If
    14. End Sub
    15. Private Sub DGV1_CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DGV1.CellValueChanged
    16. If e.ColumnIndex = 0 Then
    17. CountRows(CType(sender, DataGridView))
    18. End If
    19. End Sub
    20. Sub CountRows(dgv As DataGridView)
    21. Dim compensation As Integer = 0
    22. If dgv.AllowUserToAddRows Then compensation += 1
    23. RowsTotal = dgv.Rows.Count - compensation
    24. CheckedTotal = 0
    25. If RowsTotal > 0 Then
    26. For i As Integer = 0 To RowsTotal - 1
    27. If CBool(dgv.Rows(i).Cells(0).Value) = True Then
    28. CheckedTotal += 1
    29. End If
    30. Next
    31. End If
    32. Lb_count.Text = CheckedTotal & "/" & RowsTotal
    33. End Sub
    34. End Class
    @jan99
    Das geht auch mit einem Event alleine (CellContentClick):

    VB.NET-Quellcode

    1. Private Sub DGV1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DGV1.CellContentClick
    2. Dim dgv = DirectCast(sender, DataGridView)
    3. If e.ColumnIndex = 0 Then
    4. dgv.CommitEdit(DataGridViewDataErrorContexts.Commit)
    5. CountRows(dgv)
    6. End If
    7. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()