5

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

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

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

4

2 回答 2

5

解释

  1. 一个 DataRow 的 RowState 为“ Added ”,当它被新添加到 Table 中时,调用后AcceptChanges()RowState 将被设置为“ Unchanged
  2. 当 DataRow 包含其原始值时,它具有 DataRowVersion“原始”。在调用AcceptChanges()DataRow 或 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 也是如此。你绝对应该看看这两篇文章。

数据行版本

引用链接的 MSDN 文章:

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

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

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

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

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

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

于 2018-02-13T21:51:00.983 回答
0

行状态(已添加、已删除 ..) 行版本(原始、当前、建议)

更新方法使用 Row Version 来决定将哪些更改应用于数据库。如果我们在 TableAdapter 上调用 AcceptChanges 方法 在调用 Update 方法之前:当前版本将是原始版本 所以你不应该在调用 Update 方法之前调用 ACCEPTCHANGES 方法

于 2019-08-11T07:56:13.003 回答