在内存中对DataTable表操作时,在修改完表中数据之后,如何让它恢复到上一步的状态,或者恢复到原状?

解决方案 »

  1.   

    如果你的DataTable是在数据集ds里面,可以使用ds.AcceptChanges();会将DataTable中的每行的状态恢复成初值unchanged
      

  2.   

    哦!谢谢各位!能不能在dataTable中直接操作,不再复制一个表啊,那样会很占内存的,会影响性能!
    上面的兄弟说用ds,那个ds.AcceptChanges();能将ds里的表都恢复原状吗,如果我要只恢复其中一个表可以吗?
    另外,ds的可控性没有dataTable的好,一个表操作总能比ds这个数据集要简单方便一些,而且速度更快,有没有什么方法或函数能直接令dataTable表恢复到上一步的状态或者恢复到原来的状态啊!
    谢谢各位了!!!
      

  3.   

    ds.AcceptChanges();可以复位所有表的所有行的行状态
    你也可以
    ds.YourTable.AcceptChanges();这样就可以只修改某张表了,但是注意,此时的ds是类型化数据集,如果你的数据集是非类型化的数据集,则应该
    ds.Tables["YourTableName"].AcceptChanges();
      

  4.   

    需要存盘的时候用AcceptChanges()
    恢复原状用RejectChanges()
    类似游戏里的save/load
      

  5.   

    楼上正解。AcceptChages()是接受修改,用了AcceptChages()就不能再恢复了。
      

  6.   


    可别乱误导新人啊,AcceptChanges是更新所有行状态,也就是所有更新的,插入的行的数据状态都会被更新为unchanged,删除的行会被真正删除。当调用AcceptChanges方法前。对DataSet的任何操作都只是挂起操作,并未实际执行。调用后就相当于真正执行了,就像你打开Windows操作系统里一些设置窗口时下面的“应用”按钮,你在窗口里更改设置的时候不会即时生效,只有点应用时才会生效。要想撤消行的更改就要调用RejectChanges方法。不过不能单步撤消,一次就全部撤消了。