Kann man im Datatable-Event 'RowDeleting' den Löschvorgang abbrechen?

  • VB.NET

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

    Kann man im Datatable-Event 'RowDeleting' den Löschvorgang abbrechen?

    Hi Community
    Wie der Titel schon beschreibt...
    Zum Beispiel darf unten eine Row, wo ein Spaltenwert dem DefaultValue gleicht, nicht gelöscht werden ...

    VB.NET-Quellcode

    1. Private Sub MeineTabelleDataTable_RowDeleting(sender As Object, e As System.Data.DataRowChangeEventArgs) Handles Me.RowDeleting
    2. Dim rw = DirectCast(e.Row, MeineTabelleRow)
    3. If rw.MeineSpalte = MeineSpalteColumn.DefaultValue.ToString Then ... Vorgang abbrechen
    4. End Sub

    Im DGV kann man den Löschvorgang mit e.Cancel = True abbrechen - geht das in der obigen Vorgehensweise irgendwie auch?
    Ich habe eine Lösung gefunden:

    VB.NET-Quellcode

    1. Private Sub MeineTabelleDataTable_RowDeleting(sender As Object, e As System.Data.DataRowChangeEventArgs) Handles Me.RowDeleting
    2. Dim rw = DirectCast(e.Row, MeineTabelleRow)
    3. If rw.MeineSpalte = MeineSpalteColumn.DefaultValue.ToString Then Throw New DataException("NotAllowedToDeleteRow")
    4. End Sub
    Wenn die Abfrage übereinstimmt einfach eine Exception auslösen und im DGV.DataError-Event behandeln...

    VB.NET-Quellcode

    1. Private Sub DGV_DataError(sender As System.Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DGV.DataError
    2. If e.Context = (e.Context Or DataGridViewDataErrorContexts.RowDeletion) AndAlso _
    3. TypeOf (e.Exception) Is DataException AndAlso _
    4. e.Exception.Message = "NotAllowedToDeleteRow" Then e.Cancel = True
    5. End Sub
    und mit e.Cancel = True den Löschvorgang abbrechen lassen.
    Das funktioniert genau so, wie wenn man eine Datenüberprüfung bei den DataTable-Events im .ColumnChanging oder .RowChanging dürchführt und dort bei Fehleingaben eine benutzerdefinierte Exception auslöst.
    Diese Exception fängt man im DGV.DataError-Event wieder ab und macht mit e.Cancel = True den Änderungsvorgang wieder rückgängig...
    Probiere es aus, das funktioniert.