Winform中DataGridView對輸入進行實時提交的辦法:
在CurrentCellDirtyStateChanged事件中提交表格內容.
事件中代碼以下:數組
if (this.dataGridView1.IsCurrentCellDirty)
{
this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
在DataGridView中輸入是就會實時觸發CellValueChanged事件,而不是按回車和焦點離開時觸發.
爲何DataGridView中輸入時不會實時提交? 基本原理描述以下
先簡單描述下我對DataGridView的數據訪問的機制以及事件觸發的前後順序的理解。this
一、DataGridView後臺應該對應一個二維數組;spa
二、當選中某個單元格後,根據ColumnType屬性指定的DataGridViewColumn類型建立EditingControl,將當前單元格的值賦給EditingControl,同時觸發CellBeginEdit事件;orm
三、當EditingControl.Text發生變化後,觸發CurrentCellDirtyStateChanged事件,事件
四、若是在該事件中添加DataGridView.Commit()方法,將變化的內容提交到DataGridView後臺對應的二維數組中,同時會觸發CellValueChanged事件;it
五、那麼咱們就能夠在該事件中,實時對編輯的單元格內容進行校驗。form
在DataGridView添加以下的事件( CurrentCellDirtyStateChanged)後臺
private void dataGridView2_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{原理
//添加下面的代碼後,你用鼠標點擊CheckBox列的check變化後觸發CellValueChanged事件
if (dataGridView2.CurrentCell.ColumnIndex == 0)
{
dataGridView2.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}object
注意還有一個問題:
添加DataGridViewCheckBoxColumn列後,網上有說點擊check後狀態不改變的問題。
個人經驗:
一、DataGridView必須選擇Eable Editing,不然你點擊check狀態不變
二、DataGridViewCheckBoxColumn的ReadOnly設置爲false