为什么我的绑定DataGridView抛出“操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用”错误?

DataGridView控件绑定到绑定源时,我在应用程序中收到以下错误:

操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用

绑定源取决于数据表。 我正在从DataGridView过滤记录。 我使用了dataGridView1_CellValueChanged()事件,我正在过滤DataGridView。 但是当我从当前单元格中删除数据时,会发生此错误。

我该如何解决这个问题?

DataGridView引发exception,以防止发生无限循环。 造成这种情况的原因通常是以下之一:

  • 在当前活动的单元上执行操作时更改活动单元
  • 在单元格编辑已在进行中时开始,结束或取消编辑模式
  • DataGridView仍在使用它时导致活动单元格被更改的任何其他操作

查看CellValueChanged事件的处理程序,并确保您没有在处理程序中执行上述任何操作。

这很可能是由于您在保存后尝试刷新DataGridView而导致的。 我建议你调用方法而不是只调用它。

  BeginInvoke(new MethodInvoker(PopulateControl )); 

我发现这个exception发生是因为我的代码中有一个空的DataGridView.CellValidated子。 一旦我删除了那个空子,错误便消失了。

这非常相似(可能是相同的但没有编辑单元格)。 需要调用对控件所在的同一线程(事件,后台工作者,另一个线程……)之外的数据网格视图执行的任何操作。 在这里阅读解决方案。

 https://stackoverflow.com/questions/44456465/datagridview-invalidoperationexception-reentrant-call-to-setcurrentcelladdressco?noredirect=1#comment75919793_44456465 

在DataGridView.RowEnter中放置Application.DoEvents()也可以。