DataRow删除而不触发CurrentChanged事件

时间:2012-05-15 21:12:41

标签: c# event-handling datarow

好吧,我有以下问题:

我需要从绑定源中删除一行而不触发CurrentChanged事件。删除工作没有任何问题。但它立即引发CurrentChanged事件,这导致我的代码匹配到CurrentChanged事件正在执行。这导致了一个问题。 有没有办法在没有引发事件的情况下达到像.Delete()这样的类似效果?

1 个答案:

答案 0 :(得分:0)

如果有任何订阅者,删除行将始终引发该事件。

如果事件代码在您的控制之下,您可以设置一个在BindingSource_CurrentChanged事件处理程序中检查的标志:

private void DeleteRow()
{
  this.justDeletedRow = true;
  this.bindingSource.DeleteRow(...);
}

protected void BindingSource_CurrentChanged(object sender ...)
{
  if (this.justDeletedRow)
  { 
     this.justDeletedRow = false;
     return;
  }

  // Process changes otherwise..
}

如果代码不在您的控制之下 - 如果您绑定到某个组件,比如说 - 那么您可以在执行操作时取消绑定处理程序:

private void DeleteRow()
{
  this.bindingSource.CurrentChanged -= this.component.BindingSource_CurrentChanged;
  this.bindingSource.DeleteRow(...);
  this.bindingSource.CurrentChanged += this.component.BindingSource_CurrentChanged;
}