在问题发生之前澄清DGV中发生的事情。我用数据加载我的DGV并将第1列设置为主键列。除了以下场景之外,添加和编辑数据是完美的。
编辑现有行(有多列)时,总共可以说3个用于参考目的。我更改了第2列和第3列中的值。然后,我将第1列的值(主键列)更改为主键列中现有值的值。然后它会触发DataError事件并相应地处理它(我很高兴这个以及我如何处理它除了1件事)。在事件结束时,整行编辑内容恢复(更改回原始)并且我想停止此操作(我设置焦点并开始编辑第1列的单元格,然后再次开始编辑过程)。
目前它将处理错误并执行我需要它做的所有事情,但我无法找到事件,也不会阻止它在DataError事件触发后丢弃我的更改。
任何人都可以请我指出一个事件或停止丢弃数据的方法。
如果您需要更多信息,请告诉我,我会提供帮助。我没有发布任何代码,因为它在这一刻不相关,因为我试图找到丢弃我的更改的事件/方法的入口点。
答案 0 :(得分:0)
在这里的一位成员的帮助下,我发现了这个问题。所以基本上它归结为在CellEndEdit事件执行时不提交值。
Dim row As DataRowView = DirectCast(DataGridView.CurrentRow.DataBoundItem, DataRowView)
If (row Is Nothing OrElse Not row.IsNew) Then
Validate()
DataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
我只在非主键的列上执行此操作,因为我希望在引发DataError时将此值恢复并进入编辑状态,以便用户可以更改值或将其保留为原始值
我还检查该行是否为新行,因为这种情况不会发生在新行上。