2012-02-02 57 views
1

为了备份目的,我需要克隆整个数据行当前/原始值。 如果我使用:恢复旧的DataRow并设置原始版本值?

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 [“关口”,DataRowVersion.Original])都丢了,因为我不能设置值这个表达式。

回答

1

确保访问一个DataRow的的DataRowVersion属性之前打电话给你的数据集AcceptChanges或数据表。

Row States and Row Versions摘录:

当AcceptChanges的上调用数据集,数据表,或DataRow中,所有的行 与已删除的行的状态被去除。其余的行 给出不变的行状态,并在原始行 版本的值与当前行版本值覆盖。当 RejectChanges被调用时,添加了一排状态的所有行 删除。其余各行给出的不变的行状态, 在当前行版本的值与 原始行版本值覆盖。