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

时间:2016-10-29 08:09:09

标签: c#

我使用下面的代码用一个客户对象填充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;

1 个答案:

答案 0 :(得分:0)

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

  • 在当前活动的单元格上执行操作时更改活动单元格

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

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

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

快速解决方法可以使用BeginInvoke。 BeginInvoke是一个异步调用,因此gridview更改/编辑事件立即返回,之后执行该方法,此时gridview不再使用当前活动的单元格。

this.BeginInvoke(new MethodInvoker(() =>
        {
            //do something
        }));