2014-04-30 126 views
0

我有一個DataTable,其中一列填充了文本文件中的單詞列表,我創建了一個方法來讀取一個字符串,如果該字符串被創建,那麼該行必須被刪除,但問題在於DataTable沒有得到更新。DataTable不會獲取更新?

foreach(string line in file) 
{ 
    tagst.Rows.Add(line) 
} 

string s; 
for (int k = 0; k < tagst.Rows.Count; k++) 
{ 
    s = tagst.Rows[k]["Tags"].ToString(); 
    if(s.Equals("Jad")) 
    { 
     tagst.Rows[k].Delete(); 
    } 
} 
+0

似乎並沒有使用'words'。您還必須向後迭代以刪除行,因爲一旦刪除了一行,您的索引就會關閉。 – LarsTech

回答

0
你的循環後

,叫tagst.AcceptChanges();

每文檔:

When AcceptChanges is called, any DataRow object still in edit mode successfully ends its edits. The DataRowState also changes: all Added and Modified rows become Unchanged, and Deleted rows are removed.

由於@LarsTech說,你要返工你的循環,如:

for (int i = tagst.Rows.Count - 1; i >= 0; i--) 
{ 
    // .... 
} 
+0

對不起,但是當我不得不返工或迭代我的循環? – user3527065

+0

您的索引將關閉,並且您會錯過行。但我不認爲你需要真正的改變還沒有被應用。 – Jonesopolis

0

您編碼的一個問題是,當你刪除行 - 你需要從最後一個開始倒退,原因很簡單。一旦你刪除了第3,10,20行中有多少行將保留下來?爲什麼你需要從底部開始?因爲tagst會在刪除完成後自動重新編制索引並重新排序。

但是你的tagst.Rows.Count已經設置,並沒有得到刷新!

基本上,一旦你的計數器(K)命中數字的行已經被刪除,你會看到最好的錯誤,更糟糕的是你的應用程序會粉碎,如果你沒有錯誤處理例程設置。既然你沒有發佈你創建tgst的實際代碼,我將展示如何在數組中完成它。聲明變量omymited ... 試試這個:

for (int k=tagstArray.Count; k>0; k--) 
    { 
     s = tagstArray[k].ToString(); 
     if(s.Contains("Jad")) 
     { 
      tagstArray[k].Remove(k); 
     } 
    }