1

目前我正在使用this.EndInvoke(this.BeginInvoke(new MethodInvoker( this.resortRows )));调用检查空单元格然后对 DGV 进行排序的方法。但我是从 CellEndEdit 调用它的。

如果通过按 Enter 或 Tab 调用事件,一切正常,但如果我在仍处于 EditMode 时单击另一个单元格,我会在使用排序命令的行出现错误:

Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function.

这是排序命令:

this.dataGridView1.Sort(this.dataGridView1.Columns[2], ListSortDirection.Ascending);

我试图MouseClick像这样处理这个事件:

private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
  this.dataGridView1.EndEdit();
}

但这只有在我单击 DGV 内部的灰色区域(不在任何单元格或标题上)时才有效。我怎样才能解决这个问题?

4

1 回答 1

1

我实际上尝试了您的代码,似乎问题出在EndInvoke.
只需将其删除(即仅使用BeginInvoke),它就会正常工作。

编辑 :

在处理程序退出后立即执行BeginInvoke不使用调用的方法。EndInvokeCellEndEdit

如果需要在每次排序后调用代码,只需将其放在调用方法的末尾即可。

于 2012-08-03T08:04:41.813 回答