我的表单中有一个gridView和一个按钮,用于删除此gridView中的选定行以及DataSet中的所选行。
这是我尝试过的代码:
DataRow row = gridView1.GetDataRow(gridView1.GetSelectedRows()[0]);
for (int i = 0; i < connexion.ds.Tables["Auteur"].Rows.Count; i++)
if (row[0].ToString() == connexion.ds.Tables["Auteur"].Rows[i][0].ToString())
connexion.ds.Tables["Auteur"].Rows[i].Delete();
for (int i = 0; i < connexion.ds.Tables["AuteurGV"].Rows.Count; i++)
if (row[0].ToString() == connexion.ds.Tables["AuteurGV"].Rows[i][0].ToString())
connexion.ds.Tables["AuteurGV"].Rows[i].Delete();
SqlCommandBuilder cmb = new SqlCommandBuilder(da);
da.Update(connexion.ds, "Auteur");
gridControl1.DataSource = connexion.ds.Tables["AuteurGV"];
但它在第6行给出了一个错误:
无法通过该行访问已删除的行信息。
答案 0 :(得分:1)
更改为
DataRow row = gridView1.GetDataRow(gridView1.GetSelectedRows()[0]);
string valToDelete = row[0].ToString();
for (int i = 0; i < connexion.ds.Tables["Auteur"].Rows.Count; i++)
if (valToDelete == connexion.ds.Tables["Auteur"].Rows[i][0].ToString())
connexion.ds.Tables["Auteur"].Rows[i].Delete();
for (int i = 0; i < connexion.ds.Tables["AuteurGV"].Rows.Count; i++)
if (valToDelete == connexion.ds.Tables["AuteurGV"].Rows[i][0].ToString())
connexion.ds.Tables["AuteurGV"].Rows[i].Delete();
SqlCommandBuilder cmb = new SqlCommandBuilder(da);
da.Update(connexion.ds);
gridControl1.DataSource = connexion.ds.Tables["AuteurGV"];
问题出现在第二个for循环中,您已经删除了从中提取要在比较中使用的键值的行。这是不可能的,因为当RowState属性更改为Delete时,您无法使用该行中的任何值 我还更改了da.Update调用以更新所有数据集,而不仅仅是Auteur表。