首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在datagridview中实现撤销操作

如何在datagridview中实现撤销操作
EN

Stack Overflow用户
提问于 2009-10-26 17:48:01
回答 2查看 7.7K关注 0票数 0

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

代码语言:javascript
运行
复制
 private void button29_Click(object sender, EventArgs e)
    {

           Datatable dt;
          dt.RejectChanges();


    }

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

EN

回答 2

Stack Overflow用户

发布于 2010-06-09 20:48:48

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

假设您的表中有两列,int c1和varchar c2。这里有一些示例类,只是为了给您一些提示。

代码语言:javascript
运行
复制
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推送到操作堆栈上。当被要求撤销时,你将它从撤销堆栈中弹出,调用它的undo方法,并将其推入重做堆栈。如果你被要求重做一些动作,你会从重做堆栈中弹出,调用重做,推入撤消堆栈。当您有另一个新操作时,您应该清除重做堆栈,并将新操作推送到撤消堆栈。

票数 3
EN

Stack Overflow用户

发布于 2009-10-26 18:00:03

要进行更精细的撤消,可以在DataRow级别使用RejectChanges()。我不记得DataTable保留了一个编辑序列(为什么),所以你必须设置你自己的“RowChanges”列表(后进先出堆栈)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1623937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档