DataGridView Last Row не фиксирует - PullRequest
0 голосов
/ 27 августа 2018

Я провел слишком много времени на этом, и поиски не помогли найти то, с чем я сталкиваюсь.

У меня есть 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() после последнего изменения ячейки, но это не изменило поведение. Если я приостановлю процедуру перед фиксацией и вручную отредактирую ячейку, все строки сохранятся. (это намекает мне, что он не полностью вышел из режима редактирования, но я не могу найти никаких доказательств или способа закончить редактирование, если это так)

1 Ответ

0 голосов
/ 27 августа 2018

@ у jmcilhinney был недостающий кусок. Добавив ExistingHAFData.EndEdit(), я получаю 100% измененных строк, сохраненных в базе данных.

        Dim DidCommit As Boolean = MainData.CommitEdit(DataGridViewDataErrorContexts.Commit)
        ExistingHAFData.EndEdit()
        Dim LinesChanged As Integer = DeleteAdapter.Update(CType(ExistingHAFData.DataSource, Data.DataTable))

Я действовал на основании ложного предположения о том, что проблема была связана с самой сеткой, а не с источником привязки.

...