Я провел слишком много времени на этом, и поиски не помогли найти то, с чем я сталкиваюсь.
У меня есть DataGridView, который связан с BindingSource ExistingHAFData
. Когда пользователь нажимает кнопку, код проходит по всем выбранным строкам и помечает имя и дату, когда запись была «удалена» ( запись с именем и датой не отображается в активном списке; и может быть восстановлено в будущем ).
То, что происходит, это работает нормально для всех, кроме последней записи. Например, если пользователь выберет пять записей, четыре обновятся должным образом; последняя выбранная строка не будет - фактически, для ясности - ВСЕ выбранные строки в сетке должным образом не обновятся, но когда я вызываю Обновление для адаптера, только пять возвращается вместо пяти (и в таблице данных БД четыре получили значения, последнего нет).
Public DeleteAdapter As New SqlDataAdapter
Private Sub DeleteButton_Click(sender As Object, e As EventArgs) Handles DeleteButton.Click
Dim SelectedRowCount As Integer = MainData.Rows.GetRowCount(DataGridViewElementStates.Selected)
If SelectedRowCount > 0 AndAlso MessageBox.Show("Are you sure you want to close these requests? If they have not already been filled, this will halt their progress.", "Close Requests", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
For Each dataRow As DataGridViewRow In MainData.SelectedRows
dataRow.Cells("DeletedBy").Value = Common.GetFullUserName(Common.UserName.LastFirst)
dataRow.Cells("DeletedDate").Value = Now.ToShortDateString
Next
DeleteAdapter.UpdateCommand = New SqlCommandBuilder(DeleteAdapter).GetUpdateCommand(True)
Dim DidCommit As Boolean = MainData.CommitEdit(DataGridViewDataErrorContexts.Commit)
Dim LinesChanged As Integer = DeleteAdapter.Update(CType(ExistingHAFData.DataSource, Data.DataTable))
If LinesChanged > 0 Then
LoadRecords(Fields.All)
MessageBox.Show("Data successfully saved.", "Data Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("No new data was found to save to the database. If you have made changes, be aware that they have not yet been saved.")
End If
Else
MessageBox.Show("You must select at least one row before pressing Delete.", "No Rows Selected", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
В приведенном выше коде DidCommit имеет значение True. LinesChanged, однако, на один меньше, чем я ожидал.
Я попытался добавить такие строки, как MainData.EndEdit()
после последнего изменения ячейки, но это не изменило поведение. Если я приостановлю процедуру перед фиксацией и вручную отредактирую ячейку, все строки сохранятся. (это намекает мне, что он не полностью вышел из режима редактирования, но я не могу найти никаких доказательств или способа закончить редактирование, если это так)