如何使用DataRowViewVersion获取DataRowView的原始行和修改行



我有一个从数据库填充的数据表。我用这个表加载了一个bindingsource。

Sub LoadData()
Dim bsTemp As BindingSource = New BindingSource
bsTemp.DataSource = dtTemp
End Sub
然后,我用其他代码以编程方式编辑数据表中的值。我从不调用AcceptChanges() ..让我明确一点,绝不。

我调用bstem . enddit(),我也调用我的dtTemp.Row(x). enddit()每当我改变它。

所以现在我要做的就是比较这两行(我知道我可以对每一列都使用a,但我不想这样做)

我想知道如何做到这一点:

Dim modview As New DataView(dtTemp.Copy, "", "Id", DataViewRowState.ModifiedCurrent)
Dim origView As New DataView(dtTemp.Copy, "", "Id", DataViewRowState.ModifiedOriginal)

那么我可以执行这样的操作:

    Dim rowComparer As DataRowComparer(Of DataRow) = DataRowComparer.Default
    IsEqual = rowComparer.Equals(origRow.Row, modRow.Row)

当我这样做时,两个视图都显示已修改的数据,其中一个应该只显示原始未修改的行。

我知道我可以做这个[c#版本]:

SomeDataRow[0, DataRowVersion.Original] //by index
SomeDataRow["ColumnName", DataRowVersion.Original]

但是这又是在逐列的基础上工作的-我是迭代器-我认为没有理由这样做,当DataView应该已经内置了这个。所以我做错了什么,我没有看到原始版本。

New DataView(..)不确定要复制哪些行,它只说明这些行在视图中之后的状态。第一个参数表示哪几行是dtTemp.Copy

由于数据表的copy方法是所有行的副本,您可能希望使用类似select方法的东西,它允许您基于状态进行过滤。

dtTemp.Select("","",ModifiedOriginal)
编辑:

这样做肯定有问题。根据MSDN给出的示例,如果您使用DataView.RowStateFilter,它应该工作。我测试了一下,确实有效。我认为关键是DataView控制你所看到的。如果您通过DataRow查看原始数据,它始终是当前的。

相关内容

  • 没有找到相关文章

最新更新