通过单击离开并按Enter键退出datagridview单元格编辑有什么区别?

时间:2012-03-19 13:11:41

标签: c# datagridview

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

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

DataGridView绑定到DataTable。

当我通过单击远离单元格进入CellEndEdit事件时,我在Sort调用时得到一个重入错误(操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用。)。如果我按Enter键进入事件我没有收到此错误。即使我正在编辑已排序列中的值,我也不会在gridview排序后得到错误。

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

由于 丹

2 个答案:

答案 0 :(得分:4)

您提交单元格编辑所采取的操作之间存在细微差别。基本上通过单击您可以了解单击数据网格视图的另一个单元格。此操作由网格视图以这种方式处理:

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

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

通过Enter键提交更改只会在CellEndEdit处理程序完成后调用select cell作为活动状态。

答案 1 :(得分:0)

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