Vb.net getchanges不';I don’’一半的时间都不会返回更改

Vb.net getchanges不';I don’’一半的时间都不会返回更改,vb.net,datatable,dataset,xceed,Vb.net,Datatable,Dataset,Xceed,我正在使用一个绑定了数据集/数据表的Xceed网格。问题是,我需要知道在网格中加载新数据之前是否进行了更改,因此,如果不保存更改,则会丢失更改 但是无论是数据集还是数据表的函数getChanges([DataRowState]) 返回正确的东西:S 我发现有时会调用dataColumnChangeEvent,但不会调用dataRowChangeEvent,此时更改不会保存到getChanges()函数中 当我在编辑单元格中单击网格外,而不是以任何方式选择网格的另一个单元格时,就会发生这种情况 另

我正在使用一个绑定了
数据集
/
数据表
的Xceed网格。问题是,我需要知道在网格中加载新数据之前是否进行了更改,因此,如果不保存更改,则会丢失更改

但是无论是
数据集
还是
数据表
的函数
getChanges([DataRowState])
返回正确的东西:S

我发现有时会调用
dataColumnChangeEvent
,但不会调用
dataRowChangeEvent
,此时更改不会保存到
getChanges()
函数中

当我在编辑单元格中单击网格外,而不是以任何方式选择网格的另一个单元格时,就会发生这种情况

另外,我已经查看了
rowState
更改为Unchanged
,即使数据do已更改:S


有什么想法吗?

太好了!我终于找到了解决办法

即使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,因为我们只能对状态不变的行设置modified()

之所以选择AcceptChanges(),是因为只执行setModified()会删除已编辑单元格上的更改

我们执行SetModified(0),因为if not AcceptChanges()使RowState保持不变,因此它不会进入表的getChanges

编辑:这带来了另一个问题,dataAdapter使用datarow的原始值和当前值进行更新、删除和插入, 执行“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
既不显示消息框,也不获取dataTable的getChanges()中的更改

而且,只有

MessageBox.Show("Changing")
不显示previons messageBox,而是显示messageBox,并正确地进行更改,但它会中断事件,因此不会在newProjectSelected=>中进一步执行。没有加载新项目,但只需要“重新clic”

所以,我已经解释了它的行为

但这太奇怪了,如果有人能解释一下舒克的行为,我将不胜感激