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