在我的测试过程中,从编辑单元格到结束编辑整个过程仅仅涉及到一下几个事件:
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中的属性,获取当前正在编辑的单元格的当前值,原始值。