-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"]; 

問題は 2 番目の for ループにあります。比較で使用するキー値を抽出する行は既に削除されています。RowState プロパティが Delete に変わると、その行の値を使用できないため、これは不可能です。
また、da.Update 呼び出しを変更して、Auteur テーブルだけでなく、すべてのデータセットを更新しました。

于 2012-09-23T17:38:11.600 に答える