Ich habe eine DataGridView an eine BindingSource gebunden. Ich habe dann eine Taste, um einen neuen Datensatz hinzuzufügen:AddNew(), Probleme beim Löschen dieser Zeile
Private Sub btnNew_Click(sender As Object, e As EventArgs) Handles btnNew.Click
_bsStaff.AddNew()
End Sub
Dies hat eine neue Zeile erstellen, auch mit der „nächsten neuen/leeren“ Zeile danach. Dies funktioniert gut, außer wenn ich drücken Sie sofort meine Delete-Taste Mit dieser neu hinzugefügte Zeile zu versuchen und zu entfernen:
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
If MessageBox.Show("Delete staff member record?", "Confirm", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
_bsStaff.RemoveCurrent()
End If
End Sub
Dies entfernt die neue Zeile, sondern auch die ein, bevor es!
Ich habe versucht, eine Zeile vor RemoveCurrent, _bsStaff.EndEdit()
und auch If _bsStaff.Position + 1 = _bsStaff.Count Then
hinzuzufügen, aber das Verhalten bleibt bestehen.
Kann jemand dieses Verhalten erklären und eine Lösung anbieten?
Added: Ich dachte, ich hätte es mit diesem Code zu schlagen, die Überprüfung des Zeilenstatus:
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
Dim state = CType(_bsStaff.Current, DataRowView).Row.RowState
Select Case state
Case DataRowState.Added
_bsStaff.RemoveCurrent()
Case DataRowState.Deleted
MessageBox.Show("Row already deleted.", "Delete")
Case DataRowState.Detached
_bsStaff.CancelEdit()
Case DataRowState.Modified
If MessageBox.Show("Delete staff member record?", "Confirm", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
_bsStaff.RemoveCurrent()
End If
Case DataRowState.Unchanged
If _bsStaff.Position + 1 > _bsStaff.Count Then
'do nothing, the new row
ElseIf MessageBox.Show("Delete staff member record?", "Confirm", MessageBoxButtons.YesNo, _
MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
_bsStaff.RemoveCurrent()
End If
Case Else
'do nothing
End Select
End Sub
jedoch auf dem Screenshot suchen,
wenn Ich klicke in die neue Zeile und klicke dann auf meine Schaltfläche, sie befindet sich im Status Unverändert, aber in der vorherigen Zeile befindet sich die Zeile Mietdatensatzzeiger (und auf den sich der Zustand Unverändert wahrscheinlich bezieht), wird diese Zeile gelöscht.
Im Wesentlichen denke ich, ich brauche einen Weg zu erkennen, dass die neue Zeile gerade angeklickt wurde, aber nichts eingegeben wurde, so dass ich den Versuch löschen kann.
Stellen Sie sicher, dass Sie keinen Ereigniscode irgendwo in diesem Prozess gefeuert haben. Was ist das eigentliche Daten-Repository? – Plutonix
'DefaultValuesNeeded' wird verwendet, um ein Element aus einer Abteilungs-Combobox auszuwählen. Die Daten sind SQL Server mit zwei Tabellen, Staff und Department. Ach ja, es ist dieser Code, der ihn beeinflusst - aber ich brauche diesen Code immer noch, um eine Abteilung auszuwählen. Ohne diesen Code und durch Klicken in die neue Zeile und Löschen löscht er auch die vorherige Zeile. Aber vielleicht ist das ein etwas anderes Thema? –
Wenn Sie in eine neue Zeile klicken, wird sofort ein Inkrementwert von -1, -2 usw. erzeugt, der relevant sein kann. –