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