2015-06-09 40 views
2

我正在通過一個foreach循環的數據集循環嘗試刪除沒有與指定的值匹配的數組的行,並且我想要獲取ds數據集中當前行的索引刪除該行。例如:如何獲取數據集中某行的索引?

for(int i =1;i<=TotalWinners;i++) 
{ 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     if (dr["ID"] != Winners[i, 0]) 
     { 
      //int x = ds.Tables[0].Rows.IndexOf(); 
      int index = ds.Tables[0].Rows.IndexOf[current row index] 
     } 
    } 
} 

如何獲得循環中該行的索引?如果我無法獲得該行的索引,那麼如何通過ID選擇並刪除該行?

回答

3

大部分集合都不允許在遍歷foreach的同時更改內容(刪除)。如果你想刪除行,你可以簡單地使用循環而不是foreach。您可以爲更多的MSDN文章刪除行中的DataTable How to: Delete Rows in a DataTable

for (int i=0 i < ds.Tables[0].Rows.Count; i++) 
{ 
    if (ds.Tables[0].Rows[i]["ID"] != Winners[i, 0]) 
    { 
     ds.Tables[0].Rows[i].Delete(); 
    }   
} 
ds.AcceptChanges(); 

IEnumerator Interface wont allow changes like adding, modifying, or deleting elements

一個枚舉仍然有效的,只要集合保持不變 。如果對集合進行了更改(例如添加,修改或刪除元素),則枚舉器無法恢復,並且下一次調用MoveNext或Reset將拋出 InvalidOperationException。如果集合在 MoveNext和Current之間修改,則即使枚舉器已失效,Current也會返回它設置爲的元素 。

它值得看DataSet.AcceptChanges方法將承諾在DataSet作出的更改。

+1

@Ali,你可以這樣做ds.Tables [0] .Rows [i] [「ID」] – Adil

相關問題