Windows Forms 的 DataGridView 開啟編輯資料之後,我們就可以在畫面上直接對資料進行修改,預設的統一操作行為是修改完資料之後,按下 Enter 鍵或是離開該儲存格,資料就會更新到綁定的 DataSource 上,就像下面這樣:
但是呢,使用者會希望能在修改之後立即更新到 DataSource,不要再多敲 Enter 鍵或離開儲存格的動作,尤其是 ComboBox,我們來看一下怎麼弄?
從資料修改到更新至 DataSource 的中間,儲存格會有一個 Dirty
的狀態,意謂著資料已被修改,但是尚未更新到 DataSource 去,我們只要掌握到儲存格 Dirty 狀態的變更時機,在 Dirty 狀態變更的當下,立即用程式的方式更新 DataSource,就達到了使用者要的需求了。
在 DataGridView 有一個 CurrentCellDirtyStateChanged
事件,它會在儲存格 Dirty 狀態變更的時候發出這個事件,我們只要在裡面做攔截就行了。
this.dataGridView1.CurrentCellDirtyStateChanged += (sender, e) =>
{
var dataGridView = (DataGridView)sender;
if (dataGridView.IsCurrentCellDirty)
{
dataGridView.EndEdit();
}
};