您的位置:首页 > 其它

Winform中DataGridView对输入进行实时提交的办法

2016-01-23 00:00 225 查看

Winform中DataGridView对输入进行实时提交的办法

Winform中DataGridView对输入进行实时提交的办法:
在CurrentCellDirtyStateChanged事件中提交表格内容.
事件中代码如下:

if (this.dataGridView1.IsCurrentCellDirty)
{
this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
在DataGridView中输入是就会实时触发CellValueChanged事件,而不是按回车和焦点离开时触发.
为什么DataGridView中输入时不会实时提交? 基本原理描述如下
先简单描述下我对DataGridView的数据访问的机制以及事件触发的先后顺序的理解。

1、DataGridView后台应该对应一个二维数组;

2、当选中某个单元格后,根据ColumnType属性指定的DataGridViewColumn类型创建EditingControl,将当前单元格的值赋给EditingControl,同时触发CellBeginEdit事件;

3、当EditingControl.Text发生变化后,触发CurrentCellDirtyStateChanged事件,

4、如果在该事件中添加DataGridView.Commit()方法,将变化的内容提交到DataGridView后台对应的二维数组中,同时会触发CellValueChanged事件;

5、那么我们就可以在该事件中,实时对编辑的单元格内容进行校验。

在DataGridView添加如下的事件( CurrentCellDirtyStateChanged)

private void dataGridView2_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{

//添加下面的代码后,你用鼠标点击CheckBox列的check变化后触发CellValueChanged事件
if (dataGridView2.CurrentCell.ColumnIndex == 0)
{
dataGridView2.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}

注意还有一个问题:

添加DataGridViewCheckBoxColumn列后,网上有说点击check后状态不改变的问题。

我的经验:

1、DataGridView必须选择Eable Editing,否则你点击check状态不变

2、DataGridViewCheckBoxColumn的ReadOnly设置为false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: