伟大的!我终于找到了解决方案。
即使 dataRowChangeEvent 似乎没有被调用(我会在后面解释)
如果 rowChangeEvent 中的唯一代码是下面的代码,则它可以工作:
Private Sub RowChanged(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
If e.Row.RowState = DataRowState.Unchanged Then
e.Row.AcceptChanges()
e.Row.SetModified()
End If
End Sub
我们检查 rowState 是因为我们只能 setModified() 一个未更改状态的行。
我们执行 AcceptChanges() 是因为只执行 setModified() 会删除已编辑单元格上的更改。
我们这样做 SetModified(0 因为如果不是 AcceptChanges() 则将 RowState 保留为 Unchanged,因此它不会进入表的 getChanges。
编辑:这带来了另一个问题,dataAdapter 使用数据行的原始值和当前值进行更新、删除和插入,执行“acceptChanges”将 OriginalValue 设置为当前值,因此删除和更新不再起作用:(
- 更多的 -
当我说它似乎没有进入事件时,这是因为下面的代码:
Private Sub RowChanged(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)
If e.Row.RowState = DataRowState.Unchanged Then
e.Row.AcceptChanges()
e.Row.SetModified()
End If
MessageBox.Show("hasError=" & IIf(e.Row.HasErrors, "true ", "false ") & _
"; action=" & e.ProposedValue)
End Sub
既不显示消息框也不获取数据表的 getChanges() 中的更改...
此外,只有
MessageBox.Show("Changing")
而不是上一个消息框,显示消息框,并正确进行更改,但是它随后会破坏事件,因此它不会在 newProjectSelected => 没有加载新项目,但它只需要一个“重新-点击”。
所以,我已经解释了它的行为方式。
但这太奇怪了,如果有人能解释这种行为,我将不胜感激。