DataGridView.DataError事件,将行更改保持在导致错误的单元格之外

时间:2017-10-10 10:46:48

标签: vb.net datagridview

在问题发生之前澄清DGV中发生的事情。我用数据加载我的DGV并将第1列设置为主键列。除了以下场景之外,添加和编辑数据是完美的。

编辑现有行(有多列)时,总共可以说3个用于参考目的。我更改了第2列和第3列中的值。然后,我将第1列的值(主键列)更改为主键列中现有值的值。然后它会触发DataError事件并相应地处理它(我很高兴这个以及我如何处理它除了1件事)。在事件结束时,整行编辑内容恢复(更改回原始)并且我想停止此操作(我设置焦点并开始编辑第1列的单元格,然后再次开始编辑过程)。

目前它将处理错误并执行我需要它做的所有事情,但我无法找到事件,也不会阻止它在DataError事件触发后丢弃我的更改。

任何人都可以请我指出一个事件或停止丢弃数据的方法。

如果您需要更多信息,请告诉我,我会提供帮助。我没有发布任何代码,因为它在这一刻不相关,因为我试图找到丢弃我的更改的事件/方法的入口点。

1 个答案:

答案 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时将此值恢复并进入编辑状态,以便用户可以更改值或将其保留为原始值

我还检查该行是否为新行,因为这种情况不会发生在新行上。