C# 为什么绑定的DataGridView会抛出一个;操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用;错误?

C# 为什么绑定的DataGridView会抛出一个;操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用;错误?,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,将DataGridView控件绑定到绑定源时,我的应用程序中出现以下错误: 操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用 绑定源取决于数据表。我正在从DataGridView中过滤记录。我在过滤DataGridView时使用了dataGridView1\u CellValueChanged()事件。但是,当我从当前单元格中删除数据时,会发生此错误 如何解决此问题?DataGridView会引发异常,以防止发生无限循环。其原因通常是以下原因之一: 在当

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

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

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


如何解决此问题?

DataGridView会引发异常,以防止发生无限循环。其原因通常是以下原因之一:

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

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

这很可能是由于您在保存后试图刷新DataGridView造成的。 我建议您调用该方法,而不仅仅是调用它

   BeginInvoke(new MethodInvoker(PopulateControl ));

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

将Application.DoEvents()放在dataGridView.RowEnter中也可以这样做。

这非常相似(可能是相同的事情,但不编辑单元格)。需要调用在控件存在的同一线程(事件、后台工作线程、另一个线程…)之外对datagridview执行的任何操作。在这里仔细阅读解决方案


这可能是由于在
DataGridview
处于
BeginEdit
时操作数据源造成的

另一种解决方案是在操作数据源时,在
DataGridView
CurrencyManager
上执行
SuspendBinding

CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager.SuspendBinding();
// Manipulate datasource
currencyManager.ResumeBinding();

False设置为datagridview的MultiSelect属性

myDataGridView.MultiSelect=false;

如果用户将某列的值更改为null,我将尝试删除该列。知道怎么做吗?@David,再次使用
CellValueChanged
事件-但是,就我个人而言,我会将列的
Visible
属性设置为false,而不是实际删除它。这样不太可能造成问题。也为我做了:-)这也很有效,这是一个实际的解决方案,而不是“确保你没有做什么”,我的问题是我正在清除数据网格中的列,它不喜欢这样(因为我调用它是由于CellEndEdit或其他原因)我一直在寻找一种比
BeginInvoke
方法更简洁的解决方案,但事实证明,微软(UIFx团队)正式推荐将此作为解决方案。可悲的是,即使是begininvoke方法也打破了我的。我正在调用
.Columns.Clear()
在重新绑定数据并重新添加列之前,删除我添加并解除绑定数据的所有自定义列(
DataSource=null
),无论我是否使用begininvoke,它都会生成错误。您面临什么问题?请清楚解释所需的一切。由于在活动cellclick事件的DGV中快速双击导致,此问题已得到解决