我已经在c#.net.Using中创建了一个应用程序,这个应用程序我们可以更新datagridview,现在我需要在其中实现撤销,请给我一些想法。
private void button29_Click(object sender, EventArgs e)
{
Datatable dt;
dt.RejectChanges();
}
使用上面的代码,我可以在更新前撤消。但我需要一个撤销功能,因为在word中,请提前建议我谢谢
发布于 2010-06-09 20:48:48
您必须创建一个撤消堆栈。在数据表上的每个编辑操作之后,用足够的信息填充此堆栈以撤消它。然后提供一种机制来以相反的方式执行堆栈中的操作。
假设您的表中有两列,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推送到操作堆栈上。当被要求撤销时,你将它从撤销堆栈中弹出,调用它的undo方法,并将其推入重做堆栈。如果你被要求重做一些动作,你会从重做堆栈中弹出,调用重做,推入撤消堆栈。当您有另一个新操作时,您应该清除重做堆栈,并将新操作推送到撤消堆栈。
发布于 2009-10-26 18:00:03
要进行更精细的撤消,可以在DataRow级别使用RejectChanges()
。我不记得DataTable保留了一个编辑序列(为什么),所以你必须设置你自己的“RowChanges”列表(后进先出堆栈)。
https://stackoverflow.com/questions/1623937
复制相似问题