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”
所以,我已经解释了它的行为
但这太奇怪了,如果有人能解释一下舒克的行为,我将不胜感激