-1

我的表单中有一个 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 行给了我一个错误:

无法通过该行访问已删除的行信息。

4

1 回答 1

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 表。

于 2012-09-23T17:38:11.600 回答