目前我正在使用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(不在任何单元格或标题上)时才有效。 我该如何解决这个问题?
答案 0 :(得分:1)
我实际上尝试过您的代码,问题似乎是EndInvoke
只需将其删除(即仅使用BeginInvoke
),它就能正常工作。
编辑:
在没有BeginInvoke
的情况下使用EndInvoke
将在CellEndEdit
处理程序退出后立即执行调用的方法。
如果您需要在每次排序后调用代码,只需将其放在调用方法的末尾。