getchanges不会在一半的时间内返回更改

时间:2012-08-20 13:06:18

标签: vb.net datatable dataset xceed

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

DataSetDataTable的功能getChanges([DataRowState])都不是 返回正确的事情:S

我发现有时会调用dataColumnChangeEvent,而不是dataRowChangeEvent,这些是更改未保存到getChanges()函数的时间。

当我在编辑单元格中单击网格而不是以任何方式选择网格的其他单元格时,会发生这种情况。

此外,我看过rowStateUnchanged,即使数据更改了:{/ p>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

大!我终于找到了解决方案。

即使似乎没有调用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,因为我们只能将MingModified()设置为Unchanged状态。

我们执行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

既不显示消息Box也不在dataTable的getChanges()中获取更改...

另外,只有

MessageBox.Show("Changing")

而不是previons messageBox,Do显示messageBox,并且Do得到正确的更改,但是它有点打破了事件,所以它在newProjectSelected =>中没有进一步发展没有加载任何新项目,但它只需要“重复”。

所以,我已经解释了它的表现。

但这太奇怪了,如果有人能解释这种行为,我会很感激。