2013-03-06 84 views
2

改變我正在寫一個包含這必將BindingSources多個DataGridView的控制選項卡式WinForms應用程序。 BindingSources反過來又綁定到業務對象的BindingLists。我的業務對象實現INotifyPropertyChanged。檢測到的BindingSource /的BindingList

我的TabControl有三個的TabPages(A,B和C)。如果我的用戶已經更改了選項卡A上的DataGridView控件中的數據,然後嘗試切換到選項卡B或C而未提交更改(在這種情況下,將數據寫入磁盤),我需要提示他們保存改變或失去它們。

爲了確定是否更改已給定的選項卡上進行,我會爲每個選項卡「pendingChange」變量。每個DataGridView控件都有它自己的CellValidating事件處理程序,用於在用戶進行更改時驗證數據。在該事件處理程序結束時,如果更改已通過所有驗證檢查,則將該選項卡的pendingChange變量設置爲true。當我的用戶單擊按鈕將更改寫回到磁盤時,我重置pendingChange變量。因此,無論何時,當我的用戶嘗試更改爲不同的選項卡時,我會檢查此變量以確定是否有任何需要先保存的更改。

現在我意識到,這種設計一大缺陷是,在DataGridView控制CellValidating事件被激發每一個細胞失去焦點的時間。所以現在我需要找到一種不同的方式來跟蹤單元格值何時發生變化。 DataGridView控件公開的另一個事件是否更適合此目的?或者也許有一個BindingList事件可以幫助我實現這個功能?如果必須,我可以爲業務對象添加布爾「已修改」屬性並根據需要進行更新。如果有可能避免這種情況,我希望因爲其中一個綁定列表在任何給定時間包含150,000個對象,並且迭代可能不會非常快。

回答

1

的BindingSource有Events。例如。 CurrentChanged噹噹前綁定的項目發生更改時發生。

+0

謝謝你的建議。我結束了使用BindingSource的ListChanged事件,這讓我解決了我的問題。 – user685869 2013-03-07 00:34:53