RowState.Added 和 DataRowVersion.Original 有什么区别

Ami*_*ren 4 .net c# datatable datarow rowstate

我有一个具有 3 个条件的函数:

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

我的问题是第二个,有人能解释一下吗? 它与第一个条件有何不同?

Tob*_*eel 5

解释

  1. 一个 DataRow 的 RowState 是“ Added ”,当它被新添加到 Table 之后调用AcceptChanges()RowState 会被设置为“ Unchanged
  2. 当 DataRow 包含它的原始值时,它具有 DataRowVersion "Original"。在调用AcceptChanges()DataRow 或 DataTable 时,DataRowVersion 将设置为“原始”。您可以说原始意味着已接受所有更改。
  3. DataRow 在编辑后具有 RowState “Modified”。

示例程序

我创建了一个小示例程序,它显示了动作的变化,以澄清差异。

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

进一步阅读

关于DataRowStates的 msdn 文档实际上解释得很好。它提供了关于每个状态的简短说明以及一些示例代码。那是为同一DataRowVersions。您绝对应该看看这两篇文章。

数据行版本

引自链接的 MSDN 文章:

调用 DataRow 对象的 BeginEdit 方法后,如果更改该值,则 Current 和 Proposed 值变为可用。

调用 DataRow 对象的 CancelEdit 方法后,Proposed 值被删除。

调用 DataRow 对象的 EndEdit 方法后,Proposed 值变为 Current 值。

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

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

调用DataRow 对象的RejectChanges 方法后,Proposed 值被丢弃,版本变为Current。