DataGridView: Bei Typenfehler wieder ein BeginEdit einer Zelle starten

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von tragl.

    DataGridView: Bei Typenfehler wieder ein BeginEdit einer Zelle starten

    Hallo zusammen, hier mal eine ggf. ungewöhnliche Anfrage.
    Ich "importiere" aus dem Clipboard Daten in ein DataGridView. Der User hat zudem noch die Möglichkeit, selbst Zeilen hinzuzufügen oder die vorhandenen im Nachgang zu bearbeiten.
    Nu möchte ich gerne, dass wenn eine Convertierung fehlschlägt, der User solange an die Cell gefesselt wird, bis es passt. Bisher habe ich es nur hinbekommen, dass der User informiert wird
    und die Zelle rot eingefärbt wird. Ich gehe aber davon aus, dass es User gibt die das nicht interessiert und dann "knallt's".

    Beim Schließen des Dialogs mit dem DGV werden die untypisierten Rows des DataGridView in eine Typisierte Tabelle geschrieben, deshalb muss das passen...
    Ich hoffe ihr wisst, was ich meine. Ich komme leider grad nicht dahinter, wie ich bei einem "Fehler" das BeginEdit einer Zelle wieder erzwingen kann. Im
    ObjectBrowser hab ich dazu nix gefunden.. :(

    VB.NET-Quellcode

    1. Private Sub dgv_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellEndEdit
    2. Dim cl = dgv.Item(e.ColumnIndex, e.RowIndex)
    3. If e.ColumnIndex = 0 Then
    4. Dim d As Date
    5. If Not Date.TryParse(cl.Value.ToString, d) Then
    6. msgExclamation($"{cl.Value} ist kein gültiges Datum!")
    7. cl.Style.BackColor = Color.Red
    8. 'TODO: hier Zelle wieder in den Edit-Modus versetzen
    9. Else
    10. cl.Style.BackColor = SystemColors.Window
    11. End If
    12. End If
    13. If e.ColumnIndex = 1 Then
    14. Dim i As Integer
    15. If Not Integer.TryParse(cl.Value.ToString, i) Then
    16. msgExclamation($"{cl.Value} ist keine gültige Zahl!")
    17. cl.Style.BackColor = Color.Red
    18. 'TODO: hier Zelle wieder in den Edit-Modus versetzen
    19. Else
    20. cl.Style.BackColor = SystemColors.Window
    21. End If
    22. End If
    23. End Sub
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup:
    Hast du dir dazu schon das DGV.CellValidating- Event angeschaut?
    Da kann man korrekte Eingaben überprüfen und
    das Verlassen der Celle mit e.Cancel=True verhindert werden...

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

    VB1963 schrieb:

    Hast du dir dazu schon das DGV.CellValidating- Event angeschaut?


    Danke, da hab' ich ma wieder zu kompliziert gedacht. Funzt nun so: :thumbsup:

    VB.NET-Quellcode

    1. Private Sub dgv_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles dgv.CellValidating
    2. If e.ColumnIndex = 0 Then
    3. Dim d As Date
    4. If Not Date.TryParse(e.FormattedValue.ToString, d) Then
    5. msgExclamation($"{e.FormattedValue} ist kein gültiges Datum!")
    6. e.Cancel = True
    7. End If
    8. End If
    9. If e.ColumnIndex = 1 Then
    10. Dim i As Integer
    11. If Not Integer.TryParse(e.FormattedValue.ToString, i) Then
    12. msgExclamation($"{e.FormattedValue} ist keine gültige Zahl!")
    13. e.Cancel = True
    14. End If
    15. End If
    16. End Sub
    "Na, wie ist das Wetter bei dir?"
    "Caps Lock."
    "Hä?"
    "Shift ohne Ende!" :thumbsup: