Rowstate.Added和DataRowversion.original之间有什么区别



我具有3个条件的功能:

  1. 如果DataRow rowstate == Added
  2. 如果!DataRow HasVersion(DataRowVersion.Original)
  3. 如果DataRow rowstate == modified

我的问题是第二个问题,有人可以照亮它吗?它与第一个条件有何不同?

说明

  1. 当datarow新添加到拨打AcceptChanges()后的表将将Rowstate设置为" 不变"
  2. dataRow包含它的dataRowversion"原始"原始值。在DataRow上调用AcceptChanges()或DataTable时,DataRowversion将设置为"原始"。您可以说原始意味着所有更改都已接受。
  3. datarow已编辑后的Rowstate"修改"。

示例程序

我创建了一个小示例程序,该程序显示了动作的变化,以阐明差异。

class Program {
    static void Main(string[] args) {
        var table = new DataTable("MyTable");
        table.Columns.Add(new DataColumn("MyColumn"));
        var row = table.NewRow();
        Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Detached
        table.Rows.Add(row);
        Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Added
        table.AcceptChanges();
        Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Unchanged
        row.BeginEdit();
        row[0] = "NewValue";
        row.EndEdit();
        Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Modified
        if (row.HasVersion(DataRowVersion.Current)) { // Does the row contain uncommited values?
            Console.WriteLine($"DataRowVersion: {DataRowVersion.Current}"); //Prints Current
        }
        table.AcceptChanges(); //Commit all DataRowChanges
        if (row.HasVersion(DataRowVersion.Original)) {
            Console.WriteLine($"DataRowVersion: {DataRowVersion.Original}"); //Prints Current
        }
        Console.ReadLine();
    }
}

进一步阅读

有关DataRowStates的MSDN文档实际上已经很好地解释了。它提供了关于每个状态(以及某些示例代码(的简短说明。对于dataRowversions来说,那也是如此。您应该一定要看一下这两篇文章。

dataRowversion

链接的MSDN文章的报价:

调用DataRow对象的启动方法后,如果更改 值,当前和拟议的值可用。

调用DataRow对象的取消方法后,提出的值将被删除。

调用DataRow对象的EndEdit方法后,提出的值将变为当前值。

调用DataRow对象的AcceptChanges方法后,原始值与当前值相同。

调用DataTable对象的AcceptChanges方法后,原始值与当前值相同。

调用DataRow对象的recubschanges方法后,提出的值被丢弃,并且版本变为当前。

行状态(添加,删除..(行版本(原始,当前,提议(

使用行版本的更新方法决定哪些更改适用于数据库。如果我们在tableadapter上调用接受法在调用更新方法之前:当前版本将是原始的方向 因此,在调用更新之前,您不应调用Acceptchanges方法 方法

最新更新