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

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


你可能感兴趣的:(Winform中DataGridView对输入进行实时提交的办法)