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引发,以防止发生无限循环。造成这种情况的原因通常是以下情况之一:
-
在对当前活动单元执行操作时更改活动单元
-
当单元格编辑时,开始、结束或取消编辑模式已经正在进行的
-
导致活动单元被更改的任何其他操作而DataGridView仍在使用它
查看一下CellValueChanged事件的处理程序,并确保你没有在处理程序中执行上述任何操作。
一个快速的解决方法是使用BeginInvoke。BeginInvoke是一个异步调用,因此gridview更改/编辑事件立即返回,并且该方法在此之后执行,此时gridview不再使用当前活动的单元格。this.BeginInvoke(new MethodInvoker(() =>
{
//do something
}));