Hallo Community
Ich habe ein Problem mit dem CellValidating Event des DataGridView. Der Code ist leider in VB.NET, ich poste diesen trotzdem hier, obwohl mycsharp eine C# Seite ist, da dieses Forum einfach nur super ist 🙂
Private Sub dgvResources_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvResources.CellValidating
If (dgvResources.Columns(e.ColumnIndex).Name = "resource") Then
If (_bsResources.Find("name", e.FormattedValue) > -1) Then
dgvResources.Rows(e.RowIndex).ErrorText = "Diese Anwendung ist bereits vorhanden."
e.Cancel = True
Else
dgvResources.Rows(e.RowIndex).ErrorText = String.Empty
e.Cancel = False
End If
End If
End Sub
Bei diesem Code kriege ich eine InvalidOperationException mit dem Text "Operation did not succeed because the program cannot commit or quit a cell value change."
Warum lässt sich sich einen Cell-Value nicht verändern?! Sobald der ausgewählte Wert nicht vorhanden ist, wird e.Cancel auf false gesetzt. Falls ESC gedrückt wird, habe ich im CellEndEdit event den error der row auf "" gesetzt.
Der Benutzer soll über eine ComboBox aus einem Applikationsppol eineauslesen können, allerdings darf jede nur einmal hinzugefügt werden. Ich dachte ich packe diese Validierung in den CellValidating Event. Ist das der falsche Weg?
Gruss,
.unreal
Ich habe es über das BindingSource gelöst:
If _bsResources.Current.Row.RowState = Data.DataRowState.Detached Then
.... überprüfen und so
End If
Lustigerweise ist dgvResources.Rows(e.RowIndex).IsNewRow immer False, weil vor dem Validieren gleich ne neue Row im DataGridView erzeugt wird, da sehe ich den Sinn nicht ganz dahinter!
Scheint mir etwas komisch, dass man solche umwege gehen muss, wäre darum trotzdem noch froh, wenn jemand seine Ideen posten würde.
.unreal