C# 每次更改后将数据表存储到堆栈中并能够撤消更改的一种方法
我有一个数据表(C# 每次更改后将数据表存储到堆栈中并能够撤消更改的一种方法,c#,wpf,datatable,datagrid,C#,Wpf,Datatable,Datagrid,我有一个数据表(my_dt)这是DataGrid的一个itemsSource,用户可以对其进行多次更改,例如交换行和更改每行的时间列,该列中的值与其他行相关,这意味着更改一行时间列中的值将更改该行下所有其他行的时间列 由于用户希望回滚或撤消无意或出于任何其他原因所做的更改,我决定创建一个DataTable类型的堆栈,每次更改后我都会推送DataTable(my_dt)在堆栈中,单击“撤消”按钮后,将其弹出,并使用“清除”和“合并”方法将DataTable和DataGrid恢复到每次单击最后一次更
my_dt
)这是DataGrid的一个itemsSource,用户可以对其进行多次更改,例如交换行和更改每行的时间列,该列中的值与其他行相关,这意味着更改一行时间列中的值将更改该行下所有其他行的时间列
由于用户希望回滚或撤消无意或出于任何其他原因所做的更改,我决定创建一个DataTable类型的堆栈,每次更改后我都会推送DataTable(my_dt
)在堆栈中,单击“撤消”按钮后,将其弹出,并使用“清除”和“合并”方法将DataTable和DataGrid恢复到每次单击最后一次更改之前的状态
这是个好主意还是不好
顺便说一下,我不想对该数据表使用AccepChanges
和RejectChanges
,因为在这种情况下,用户只能撤消他所做更改的一个步骤
DataTable的行数不超过150行
例如:
Stack<DataTable> st = new Stack<DataTable>();
private void Edit_Click(object sender, RoutedEventArgs e)
{
st.Push(ds.Tables["my_dt"].Copy());
//Edit codes
}
private void Undo_Click(object sender, RoutedEventArgs e)
{
ds.Tables["my_dt"].Clear();
ds.Tables["my_dt"].Merge(st.Pop());
}
Stack st=new Stack();
私有无效编辑\单击(对象发送者,路由目标)
{
st.Push(ds.Tables[“my_dt”].Copy());
//编辑代码
}
私有无效撤消\单击(对象发送方,路由目标)
{
ds.Tables[“my_dt”].Clear();
ds.Tables[“my_dt”].Merge(st.Pop());
}