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

时间:2011-02-25 07:25:58

标签: c# .net winforms datagridview

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

  

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

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

如何解决此问题?

7 个答案:

答案 0 :(得分:29)

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

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

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

答案 1 :(得分:26)

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

   BeginInvoke(new MethodInvoker(PopulateControl ));

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

这可能是由于在customer_id位于DataGridview中时操纵数据源引起的。

另一种解决方案是在操纵数据源时在BeginEdit的{​​{1}}上SuspendBinding

CurrencyManager

答案 5 :(得分:0)

False 设置为datagridview的MultiSelect属性。

myDataGridView.MultiSelect=false;

答案 6 :(得分:-1)

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