2016-05-11 44 views
0

在ADO.NET中,我有我的DataSet對象的類。在窗體窗體應用程序中,我有3個鏈接的列表框。 1.顯示一個nr,2.從表中選擇「名稱」值,3.從表中選擇「描述」。當我向dataSet添加一個新行時,我可以將其刪除,但問題在於當我試圖從開始時刪除dataSet中的行時。 刪除:從DataSet中刪除舊記錄並重新加載視圖c#

int licznik = 0; 
foreach(DataRow datarow in bez.dset.Tables["typ"].Rows) 
{ 
    if(datarow["nazwa"].ToString() == listBox2.SelectedItem.ToString()) 
    { 
     break; 
    } 
    licznik++; 
} 

bez.dset.Tables["typ"].Rows[licznik].Delete(); 

baz是一個帶有DataSet對象的類。 當我刷新一個列表框時,會出現一個錯誤,它無法獲取已被刪除的信息。我究竟做錯了什麼?

回答

0

Delete方法不會從DataSet表中刪除該行。它只是標記DataRow。 RowState與枚舉DataRowState.Deleted。如果您嘗試使用RowState = DataRowState.Deleted引用DataRow,則會引發上述錯誤。

如果您想要將更改保留回數據庫,則此方法是必需的。如果你仔細想想,如果刪除的行不再存在於DataSet表中,那麼如何從數據庫表中刪除該行?

如果你想刪除從內存中的數據表中刪除,那麼你需要調用

bez.dset.Tables["typ"].AcceptChanges(); 

這就要求應用您更改在內存中數據表的每一行的RowState更改爲DataRowState.Unchanged和刪除行刪除的行。當然,在這個調用之後,像DbDataAdapter這樣的ADO.NET類不再能夠將更改保存回數據庫。

如果你把你的DataRow設置爲DataRowState.Deleted在你的數據表,那麼你需要嘗試使用它

foreach (DataRow drow in bez.dset.Tables["typ"].Rows) 
{ 
    if(drow.RowState != DataRowState.Deleted) 
    { 
     string value = drow.Field<string>("NameOfYourColumnOfStringType"); 
     ..... whatever you want to do with it.... 
    } 
} 
+0

所以我應該顯示的每一行,如果是以前檢查前,檢查每一個RowState的的的RowState 「標記」爲由bez.dset.Tables [「typ」]刪除。行[licznik] .Delete();如果它沒有顯示呢? – xxyoyoxx

+0

如果您逐個手動添加列表的項目,是的。 – Steve