我需要克隆整个数据行当前/原始值,以备用。 如果我使用:
private static DataRow CopyRow(DataRow dr)
{
DataRow drCopy = dr.Table.NewRow();
DataRow drCopyOrig = dr.Table.NewRow();
for (int i = 0; i < dr.Table.Columns.Count; i++)
{
drCopy[i] = dr[i];
drCopyOrig[i] = dr[i,DataRowVersion.Original];
}
return drCopy;
}
恢复时,我的原始值(dr [“col”,DataRowVersion.Original])会丢失,因为我无法为此表达式设置值。
答案 0 :(得分:1)
在访问DataRow的DataRowVersion属性之前,请务必在DataSet或DataTable上调用AcceptChanges。
摘自Row States and Row Versions:
在DataSet,DataTable或DataRow上调用AcceptChanges时 删除行状态为Deleted的行。剩下的行是 给定行状态为Unchanged,以及Original行中的值 版本将被当前行版本值覆盖。什么时候 调用RejectChanges,行状态为Added的所有行都是 除去。其余行的行状态为Unchanged,和 当前行版本中的值将被覆盖 原始行版本值。