Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次更改后将数据表存储到堆栈中并能够撤消更改的一种方法_C#_Wpf_Datatable_Datagrid - Fatal编程技术网

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());
}