繁体   English   中英

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

[英]Fire only one event after deleting multiple DataTable rows

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

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

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

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

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事件中重新启动,所以只有在最后一个处理程序被触发后才会调用更新逻辑。

我建议你将Checkbox列添加到datagridview并提供一个delete button ,让用户只能通过选中每行的相关复选框来删除单行或多行。

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

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

  1. 处理'Delete' keydown event and bind it to the Command on viewmodel使用交互性'Delete' keydown event and bind it to the Command on viewmodel
  2. DataGridSelectedItems属性绑定到Delete Command的CommandParameter
  3. DeleteCommand handler, remove the items from the DataGrid's ItemsSource.
  4. 删除项目后,您可以运行检查

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM