我具有3个条件的功能:
- 如果
DataRow rowstate == Added
- 如果
!DataRow HasVersion(DataRowVersion.Original)
- 如果
DataRow rowstate == modified
我的问题是第二个问题,有人可以照亮它吗?它与第一个条件有何不同?
说明
- 当datarow新添加到拨打
AcceptChanges()
后的表将将Rowstate设置为" 不变" - dataRow包含它的dataRowversion"原始"原始值。在DataRow上调用
AcceptChanges()
或DataTable时,DataRowversion将设置为"原始"。您可以说原始意味着所有更改都已接受。 - 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方法 方法