2014-09-10 99 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