如何在datagridview中实现撤消操作

时间:2009-10-26 09:48:01

标签: c# .net sql-server winforms datagridview

我在c#.net中创建了一个应用程序。使用这个应用程序,我们可以更新datagridview,现在我需要在其中实现undo plz给我一些想法。

 private void button29_Click(object sender, EventArgs e)
    {

           Datatable dt;
          dt.RejectChanges();


    }

使用上面的代码我可以在更新前撤消。 但我需要一个撤消功能,因为在plz中提示我 提前谢谢

2 个答案:

答案 0 :(得分:3)

您必须创建撤消堆栈。在数据表上的每个编辑操作后填充此堆栈,并提供足够的信息以撤消它。然后提供一种机制,以相反的方式执行堆栈中的操作。

说,你的表中有两列,int c1和varchar c2。只是提示你,这里有一些示例类。

struct ColData{
 int c1;
 string c2;
};

class Action {
 public abstract bool Undo(){}
 public abstract bool Redo(){}
}

class AddAction : Action{
 ColData data;
 public AddAction(ColData d){data = d;}
 public override bool Undo(){
     //remove the row
     //identify it with info from local field 'data'
 }
 public override bool Redo(){
     //add the row with info from local field 'data'
 }

}
//other actions like Delete, Update

等等所有其他行动。对于编辑操作,您可能需要两组列值:旧的和新的,以便您可以来回重复更改。 每次进行更改时,都会将相应的Action推送到操作堆栈。当要求撤消时,将其从撤消堆栈中弹出,调用它的撤消方法,然后将其推送到重做堆栈。如果要求您重做某些操作,则从重做堆栈弹出,调用Redo,按下以撤消堆栈。 当您有另一个新操作时,您应该清除重做堆栈并将新操作推送到撤消堆栈。

答案 1 :(得分:1)

要获得更精细的撤消,您可以在DataRow级别使用RejectChanges()。我不记得DataTable保留了一系列编辑(为什么会这样)所以你必须设置自己的'RowChanges'列表(lifo stack)。

相关问题