删除多个DataTable行后仅触发一个事件

时间:2013-09-24 08:31:50

标签: c# wpf datagrid datatable rowdeleting

我的DataTable有很多行,DataTable绑定到DataGrid。通过DataGrid删除一行或多行后,我需要对重新执行的行执行特定的,非常复杂的检查。

我订阅RowDeleted事件,并从那里调用检查方法。我的问题是,当通过DataGrid删除多行时,会为每一行触发RowDeleted事件,每次调用检查方法。由于检查方法检查所有剩余的行及其所有列,这对我的应用程序来说是一个很大的减速,也非常多余。删除所有选定的行后,运行它就足够了。

删除任意数量的行后,有没有办法解除只有一个事件?

3 个答案:

答案 0 :(得分:2)

你可以借助计时器来做到这一点。声明全局计时器并设置其属性:

System.Timers.Timer _delayTimer = new System.Timers.Timer(1000);
_delayTimer.Elapsed += new EventHandler(_delayTimer_Elapsed);

 void _delayTimer_Elapsed(object sender, EventArgs e)
 {
     _delayTimer.Stop();
     Dispatcher.Invoke(new Action(UpdateMethodName)); 
     //or - with passing arguments:
     Dispatcher.Invoke(new Action<string>(UpdateMethodName), new object[]{"argument"});
 }

现在在你的RowDeleted-Event中,你可以这样做:

_delayTimer.Stop();
_delayTimer.Start();

因为计时器一次又一次地在RowDeleted事件中重新启动,所以只有在最后一个处理程序被触发后才会调用更新逻辑。

答案 1 :(得分:0)

我建议您将Checkbox列添加到datagridview并提供delete button,并让用户只删除每行上的相关复选框,以删除单行或多行。

并添加您的逻辑,检查按钮的删除命令中的剩余行。这将确保您的逻辑将在每次删除时运行一次,而不管删除的行数是多少。

答案 2 :(得分:0)

我建议你处理Delete logic in your ViewModel喜欢:

  1. 使用互动功能处理'Delete' keydown event and bind it to the Command on viewmodel
  2. SelectedItems的{​​{1}}属性绑定到删除命令的DataGrid
  3. CommandParameter
  4. 删除项目后,您可以运行支票