您的位置:首页 > 其它

Winform的DataGridView控件在编辑单元格时事件触发顺序

2015-02-12 12:59 453 查看
在我的测试过程中,从编辑单元格到结束编辑整个过程仅仅涉及到一下几个事件:

dgv_Test_CellBeginEdit

dgv_Test_CellValidating

dgv_Test_CellParsing

dgv_Test_CellValueChanged

dgv_Test_CellValidated

dgv_Test_CellEndEdit

其它可能触发的事件未做测试。

测试过程:

测试1:单元格初始数据为A,进入编辑,不修改单元格数据,直接退出编辑模式

【测试步骤】:

1、点击进入单元格进行编辑。

2、不修改单元格数据,切换单元格直接离开编辑模式。

【事件触发顺序】:

1->dgv_Test_CellBeginEdit

e.RowIndex:[0]

e.ColumnIndex:[3]

2->dgv_Test_CellValidating

e.RowIndex:[0]

e.ColumnIndex:[3]

3->dgv_Test_CellValidated

e.RowIndex:[0]

e.ColumnIndex:[3]

4->dgv_Test_CellEndEdit

e.RowIndex:[0]

e.ColumnIndex:[3]

测试2:单元格初始数据为A,然后修改为B,重新改为A,在单元格离开编辑模式时单元格数据未发生变化。

【测试步骤】:

1、点击进入单元格进行编辑,此时单元格数据为A。

2、修改单元格数据为B。

3、还原为修改前的数据A。

4、切换单元格离开编辑模式(此时单元格数据变化:原数据->新数据->原数据)。

【事件触发顺序】:

1->dgv_Test_CellBeginEdit

e.RowIndex:[1]

e.ColumnIndex:[3]

2->dgv_Test_CellValidating

e.RowIndex:[1]

e.ColumnIndex:[3]

3->dgv_Test_CellParsing

e.RowIndex:[1]

e.ColumnIndex:[3]

4->dgv_Test_CellValidated

e.RowIndex:[1]

e.ColumnIndex:[3]

5->dgv_Test_CellEndEdit

e.RowIndex:[1]

e.ColumnIndex:[3]

当单元格在离开编辑模式时,数据项没有改变时,但存在修改过程,触发dgv_Test_CellParsing,但dgv_Test_CellValueChanged没有触发。

测试3:单元格初始数据为A,修改为B,离开单元格编辑模式,单元格数据发生变化:

【测试步骤】:

1、点击进入单元格编辑模式,此时单元格初始数据为A。

2、修改单元格数据为B。

3、退出单元格编辑模式。

【事件触发顺序】:

1->dgv_Test_CellBeginEdit

e.RowIndex:[2]

e.ColumnIndex:[3]

2->dgv_Test_CellValidating

e.RowIndex:[2]

e.ColumnIndex:[3]

3->dgv_Test_CellParsing

e.RowIndex:[2]

e.ColumnIndex:[3]

4->dgv_Test_CellValueChanged

5->dgv_Test_CellValidated

e.RowIndex:[2]

e.ColumnIndex:[3]

6->dgv_Test_CellEndEdit

e.RowIndex:[2]

e.ColumnIndex:[3]

测试3:单元格初始数据为A,不进入单元格编辑模式,直接切换单元格:

【测试步骤】:

1、点击选中单元格。

2、切换选中的单元格,没有进入编辑模式时触发顺序:

【事件触发顺序】:

1->dgv_Test_CellValidating:[row:0] [column:3]

2->dgv_Test_CellValidated:[row:0] [column:3]

此过程不会触发dgv_Test_CellBeginEdit、dgv_Test_CellEndEdit、dgv_Test_CellParsing、dgv_Test_CellValueChanged方法,未进行编辑,值没有放生变化

触发了CellParsing 事件则说明单元格值存在修改过程,但是修改前和修改后的数据可能一致。

测试4:正在编辑的单元格:直接按下ESC取消编辑

将还原为编辑之前的值,并且不会触发dgv_Test_CellValidating、dgv_Test_CellValidated事件、dgv_Test_CellParsing、dgv_Test_CellValueChanged,

【触发事件以及执行顺序:】

1->dgv_Test_CellBeginEdit:

e.RowIndex:[3]

e.ColumnIndex:[3]

2->dgv_Test_CellEndEdit:

e.RowIndex:[3]

e.ColumnIndex:[3]

另外:

DataGridView.EndEdit() :关闭在当前单元格的编辑操作 此方法将触发 CellEndEdit 事件。

DataGridView.BeginEdit() :如果单元格支持编辑,将设置当前单元格进入编辑模式,此方法将触发 CellBeginEdit 事件。

不要尝试在CellBeginEdit事件中调用DataGridView.BeginEdit()方法,

也不要尝试在CellEndEdit 事件中调用DataGridView.EndEdit() 方法,

会造成死循环

在每个触发的事件中,可以通过参数e中的属性,获取当前正在编辑的单元格的当前值,原始值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐