【问题标题】:how to implement undo operation in datagridview如何在datagridview中实现撤消操作
【发布时间】:2009-10-26 09:48:01
【问题描述】:

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

 private void button29_Click(object sender, EventArgs e)
    {

           Datatable dt;
          dt.RejectChanges();


    }

使用上面的代码我可以在更新之前撤消。 但我需要一个撤消功能,如 word plz 建议我 提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    比如说,您的表中有两列,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
    

    对于所有其他操作,依此类推。对于编辑操作,您可能需要两组列值:旧的和新的,以便您可以来回重复更改。 每次发生更改时,都会将相应的操作推送到操作堆栈上。当被要求撤消时,您将其从撤消堆栈中弹出,调用它的撤消方法,然后将其压入重做堆栈。如果你被要求重做一些动作,你从重做堆栈中弹出,调用重做,推送到撤消堆栈。 当您有另一个新操作时,您应该清除您的重做堆栈并将新操作推送到撤消堆栈。

    【讨论】:

      【解决方案2】:

      要获得更微妙的撤消,您可以在 DataRow 级别使用RejectChanges()。我不记得 DataTable 保留了一系列编辑(为什么会这样),因此您必须设置自己的“RowChanges”列表(lifo 堆栈)。

      【讨论】:

      • 您好,我无法得到它,因为我是初学者请以其他方式拨打电话
      • 据我所知,恐怕没有别的办法了。 DataTables 只是不存储那么多信息。你将不得不做一些严肃的编程。从这里开始:msdn.microsoft.com/en-us/library/w9y9a401%28VS.80%29.aspx
      猜你喜欢
      • 2012-01-17
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多