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

问题描述 投票:2回答:1

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

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

我的问题是第二个问题,任何人都能发光吗?它与第一个条件有什么不同?

c# .net datatable datarow rowstate
1个回答
2
投票

Explanation

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

Example Program

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

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();
    }
}

Further Reading

关于DataRowStates的msdn文档实际上已经很好地解释了。它提供了关于每个状态以及一些示例代码的简短说明。对于DataRowVersions来说也是如此。你应该肯定看看这两篇文章。

的DataRowVersion

从链接的MSDN文章引用:

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

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

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

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

在调用DataTable对象的AcceptChanges方法后,Original值与Current值相同。

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

© www.soinside.com 2019 - 2024. All rights reserved.