Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net DataGridView.DataError事件,将行上的更改与导致错误的单元格分开_Vb.net_Datagridview - Fatal编程技术网

Vb.net DataGridView.DataError事件,将行上的更改与导致错误的单元格分开

Vb.net DataGridView.DataError事件,将行上的更改与导致错误的单元格分开,vb.net,datagridview,Vb.net,Datagridview,在问题发生之前,澄清DGV中发生的情况。我用数据加载DGV,并将第一列设置为主键列。除了下面的场景之外,添加和编辑数据是完美的 当编辑一个现有的行(有多个列)时,我们假设总共有3行,以供参考。我更改了第2列和第3列中的值。然后,我将列1的值(主键列)更改为主键列中现有值的值。然后触发DataError事件,我会相应地处理它(除了一件事之外,我对这件事以及我如何处理它感到满意)。在事件结束时,整行编辑的内容将恢复(更改回原始内容),我希望停止此操作(我设置了焦点并开始对列1的单元格进行编辑,然后再

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

当编辑一个现有的行(有多个列)时,我们假设总共有3行,以供参考。我更改了第2列和第3列中的值。然后,我将列1的值(主键列)更改为主键列中现有值的值。然后触发DataError事件,我会相应地处理它(除了一件事之外,我对这件事以及我如何处理它感到满意)。在事件结束时,整行编辑的内容将恢复(更改回原始内容),我希望停止此操作(我设置了焦点并开始对列1的单元格进行编辑,然后再次开始编辑过程)

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

任何人都可以告诉我一个事件或一个停止丢弃数据的方法


如果你需要更多的信息,请让我知道,我会帮助你。我还没有发布任何代码,因为它在这一瞬间并不相关,因为我正在试图找到丢弃我的更改的事件/方法的入口点

在这里的一位成员的帮助下,我发现了这个问题。因此,基本上可以归结为在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时还原此值并将其输入编辑状态,以便用户可以更改该值或将其保留为原始值

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