通过点击离开和按回车键退出数据网格视图单元格编辑有什么区别

本文关键字:视图 网格 数据网 单元格 编辑 区别 什么 数据 退出 离开 回车 | 更新日期: 2023-09-27 18:28:11

我的datagridview的CellEndEdit事件的前两行是:

if (dgvOptionsData.SortedColumn == null)
            dgvOptionsData.Sort(dgvOptionsData.Columns["GroupNumber"], 0);

DataGridView绑定到DataTable。

我在Sort调用中收到一个可重入错误(操作无效,因为它会导致对SetCurrentCellAddressCore函数的可重入调用。)仅当我通过从单元格中单击来输入CellEndEdit事件时。如果我按回车键输入事件,我不会得到这个错误。一旦对gridview进行排序,即使我正在编辑排序列中的值,我也不会收到错误。

此后,我重新构造了我的代码,这样我就不会使用CellEndEdit事件,因此这个错误不再是问题,但我想了解发生了什么以及为什么。如果你有任何见解,请告诉我。

谢谢Dan

通过点击离开和按回车键退出数据网格视图单元格编辑有什么区别

提交单元格编辑的操作之间有细微的区别。基本上,通过点击离开,您可以理解点击数据网格视图的另一个单元格。此操作由网格视图以以下方式处理:

  • 事件处理程序
    • 将单元格选择为活动单元格(作为参数单击的单元格,例如(1,1))
      • 提交编辑的单元格
        • CellEndEdit处理程序(用户代码)
          • 排序网格
            • 将单元格选择为活动单元格(作为无单元格的参数特殊值(-1,-1))由于重新进入该方法,这会引发错误

请注意,如果您单击其他控件(而不是数据网格),排序将正常工作。

通过Enter键提交更改只需在CellEndEdit处理程序完成后将select单元格调用为活动单元格。

DataGridView引发此异常以防止和无限循环。在对当前活动单元格执行操作时,只要您尝试更改活动单元格,就会发生这种情况。您必须输入CellEndEdit事件,因为排序会更改单元格的内容,而且您正在编辑其中一个单元格。当DataGridView正在使用活动信元时,任何更改活动信元的操作都将触发此异常。