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中的属性,获取当前正在编辑的单元格的当前值,原始值。
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中的属性,获取当前正在编辑的单元格的当前值,原始值。
相关文章推荐
- C# winform datagridview 内嵌控件值改变后立即触发事件,而不需要离开该单元格时才触发,此时需要用到dgv_CurrentCellDirtyStateChanged事件
- DataGridView单元格处于编辑状态触发KeyDown等事件
- DataGridView中对各种类型的单元格控件的事件处理(DataGridViewCheckBoxCell、DataGridViewComboBoxCell等的选定、事件触发)
- DataGridView中对各种类型的单元格控件的事件处理(DataGridViewCheckBoxCell、DataGridViewComboBoxCell等的选定、事件触发)
- DataGridView数据绑定控件---------按钮添加和事件触发总结
- DataGridView数据绑定控件---------按钮添加和事件触发总结
- asp.net中DataGridView控件中,某个列的单元格输入值改变时触发命令的方法
- CTRL键+键盘键触发控件事件-WinForm
- TextBox和DataGridView控件的事件发生顺序
- winform datagridview 根据条件来判断某一个单元格的值是否为可编辑
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 页面(Page)加载用户控件(UserControl)的事件触发顺序
- datagridview 单击特定单元格触发事件 单击按钮列触发事件 (处理点击header触发事件异常)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 【转】c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 页面(Page)加载用户控件(UserControl)的事件触发顺序
- winform中DatagridView单元格动态绑定控件
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 关于.Net WinForm 中的控件失去焦点时触发事件的问题
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)