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

  • 如果 DataRow rowstate == Added
  • 如果 !DataRow HasVersion(DataRowVersion.Original)
  • 如果 DataRow rowstate == modified

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

    最佳答案

    解释

  • 一个 DataRow 有 RowState “Added”,当它被新添加到
    Table 调用 AcceptChanges() 后,RowState 将被设置为
    “不变”
  • DataRow 具有 DataRowVersion“原始”,当它包含它时
    原始值。在 DataRow 或 DataTable 上调用 AcceptChanges() 时,DataRowVersion 将设置为“原始”。您可以说原始意味着已接受所有更改。
  • DataRow 在编辑后具有“已修改”的 RowState。

  • 示例程序

    我创建了一个小示例程序,它显示了 Action 的变化,以澄清差异。
    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 文章:

    关于c# - RowState.Added 和 DataRowVersion.Original 有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48772333/

    10-13 05:07