2012-09-23 78 views
-1

我在窗體中有一個gridView,並且有一個按鈕用於刪除此gridView中以及DataSet中的選定行。我無法從DataSet中刪除GridView中的選定行

這是我試過的代碼:

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

更改爲

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

+0

我解決了這個問題在刪除按鈕,但我有同樣的問題,當我點擊GridView中的一些行從dataSet中提取信息,這是我使用的代碼:DataRow row = gridView1.GetDataRow(gridView1 .GetSelectedRows()[0]); for(int i = 0; i

+0

gridControl和gridView是不同的控件?似乎你使用gridView刪除了一行並重新綁定了一個gridControl。 – Steve

+0

不存在相同的控制 –