到目前为止,我已经花了太长时间了,搜索并没有找到我遇到的问题。
我有一个绑定到BindingSource ExistingHAFData
的DataGridView。当用户按下按钮时,代码将遍历所有选定的行,并标记记录为“已删除”的名称和日期(具有名称和日期的记录不会显示在活动列表中;并且将来可以取消删除)。
正在发生的事情是,除了最后一条记录之外,所有其他记录都可以正常工作。例如,如果用户选择五个记录,则四个将正确更新;最后一个选定的行将不会(实际上,为了清楚起见)不会正确更新网格上的所有选定行,但是当我为适配器调用Update时,仅返回四个而不是五个(并且在DB的数据表中,四个接收到了值,最后一个没有)。
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()
之类的行,但这并没有改变行为。如果我在提交之前暂停例程并手动编辑单元格,则所有行都将保存。 (这提示我还没有完全退出“编辑”模式,但是在这种情况下,我找不到任何证据或方法可以结束编辑)
答案 0 :(得分:0)
@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))
我一直在错误地假设它是网格本身在“引起”问题,而不是绑定源。