gridview错误:它导致对SetCurrentCellAddressCore函数的可重入调用

本文关键字:函数 调用 SetCurrentCellAddressCore 错误 gridview | 更新日期: 2023-09-27 18:15:25

我已经使用下面的代码与客户对象填充gridview,但我得到错误:操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用

 List<Customer> customers=new List<Customer>();
        customers.Add(customer);
        DataTable dt = new DataTable();
        DataColumn col0=  new DataColumn("Customer Id",typeof(int));
        DataColumn col1 = new DataColumn("Name", typeof(string));
        DataColumn col2 = new DataColumn("Address", typeof(string));
        DataColumn col3 = new DataColumn("City", typeof(string));
        DataColumn col4 = new DataColumn("State", typeof(string));
        DataColumn col5 = new DataColumn("ZipCode", typeof(string));
        dt.Columns.Add(col0);
        dt.Columns.Add(col1);
        dt.Columns.Add(col2);
        dt.Columns.Add(col3);
        dt.Columns.Add(col4);
        dt.Columns.Add(col5);
        int i = 0;
        foreach (Customer item in customers)
        {
            DataRow drow = dt.NewRow();
            dt.Rows.Add(drow);
            dt.Rows[i][col0] = Convert.ToInt32(item.CustomerID);
            dt.Rows[i][col1] = item.Name.ToString();
            dt.Rows[i][col2] = item.Address.ToString();
            dt.Rows[i][col3] = item.City.ToString();
            dt.Rows[i][col4] = item.State.ToString();
            dt.Rows[i][col5] = item.ZipCode.ToString();
            i++;
        }
        grvCustomer.Visible = true;
        grvCustomer.DataSource = dt;

gridview错误:它导致对SetCurrentCellAddressCore函数的可重入调用

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

  • 在对当前活动单元执行操作时更改活动单元

  • 当单元格编辑时,开始、结束或取消编辑模式已经正在进行的

  • 导致活动单元被更改的任何其他操作而DataGridView仍在使用它

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

一个快速的解决方法是使用BeginInvoke。BeginInvoke是一个异步调用,因此gridview更改/编辑事件立即返回,并且该方法在此之后执行,此时gridview不再使用当前活动的单元格。
this.BeginInvoke(new MethodInvoker(() =>
        {
            //do something
        }));