C#DataGridView - 从CellEndEdit事件调用排序

时间:2012-08-03 07:33:24

标签: c# .net event-handling datagridviewtextboxcell

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

如果通过按Enter或Tab调用事件,一切正常,但是如果我仍然在EditMode中点击另一个单元格,我会在使用sort命令的行上收到错误:

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(不在任何单元格或标题上)时才有效。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

编辑:

在没有BeginInvoke的情况下使用EndInvoke将在CellEndEdit处理程序退出后立即执行调用的方法。

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