我无法从DataSet中删除gridView中的选定行

时间:2012-09-23 17:33:06

标签: c# winforms gridview dataset

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

  

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

1 个答案:

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