2014-09-10 101 views
1

我正在处理BindingList,并且我想要更改它的默认行为,以便刷新其绑定到的DataGridView,这是在手动引发事件时完成的。在我的情况下,我每隔1秒更新BindingList与foreach循环中的数据,并且在所有内容都是最新的之后,我想刷新DataGridView。我该怎么办?更改BindingList的默认行为

回答

1

望着MSDN文档,它看起来像你可以从BindingList<T>派生并重写BindingList<T>.SupportsChangeNotificationCore关闭列表变更通知:

public class MyBindingList<T> : BindingList<T> 
{ 
    protected override bool SupportsChangeNotificationCore 
    { 
     get { return false; } 
    } 
} 

,然后你应该能够调用ResetBindings()当你需要更新你的DataGridView的。

但是,如果通过“更新的BindingList”,你刚才的意思是添加/删除项目,那么你可以设置BindingList<T>.RaiseListChangedEvents为false,以关闭列表更改通知:

var bindingList = new BindingList<string>(); 
bindingList.RaiseListChangedEvents = false; // turn off notifications 
bindingList.Add("foo"); // no notifications raised 
... 
bindingList.RaiseListChangedEvents = true; // turn on notifications 
bindingList.ResetBindings(); // raise notifications 
+0

重写'的BindingList .SupportsChangeNotificationCor'并关闭丽st改变通知,但'ResetBinding()'不起作用。 – user1816806 2014-09-10 21:35:33

+0

对不起,是的,我刚刚创建了一个测试项目,看起来您需要在调用'ResetBindings'之前设置'RaiseListChangedEvents = true'。编辑我的答案。 – 2014-09-10 21:54:32

0

您可以:

  1. 使用BindingSource到DataGridView绑定包住的BindingList
  2. 到的BindingSource
  3. 设置BindingSource.RaiseListChangedEvents = false,所以ListChanged事件不上升(在数据网格不听变化)
  4. 更新列表
  5. 复位RaiseListChangedEvents并呼吁BindingSource.ResetBindings(false)发信号给所有绑定组件刷新数据

平时你也可以使用BindingSource.SuspendBinding以防止改变,并ResumeBinding恢复,但DataGridView的是行不通的,只能用简单的控制像文本框(见remarks on msdn