我在c#.net中创建了一个应用程序。使用这个应用程序,我们可以更新datagridview,现在我需要在其中实现undo plz给我一些想法。
private void button29_Click(object sender, EventArgs e)
{
Datatable dt;
dt.RejectChanges();
}
使用上面的代码我可以在更新前撤消。 但我需要一个撤消功能,因为在plz中提示我 提前谢谢
答案 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)。