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