2012-10-22 90 views
0

喜重複的行有我有被填充上教育課程,他們在已經參加的用戶結果的網格,因爲他們有自己的網格中的每個用戶向他們展示他們所做的每門課程及其各自的狀態他們已經嘗試了這門課程。例如:去除哈希表

CourseTitle |狀態
Excel中,不完整的
肢體語言,完全
肢體語言,放棄了
肢體語言,不完整
肢體語言,完成
肢體語言,完成

刪除重複的表應該是這樣的後:

CourseTitle |狀態
Excel中,不完整的
肢體語言,完全
肢體語言,放棄了
肢體語言,不完整

我試圖做這樣的:

公共靜態數據表RemoveDuplicateRows(數據表dTable,串colName,字符串colTitle) { Hashtable hTable = new Hashtable(); ArrayList duplicateList = new ArrayList();

foreach (DataRow drow in dTable.Rows) 
    { 

     if (hTable.Contains(drow[colName]) && hTable.Contains(drow[colTitle])) 
     { 
      duplicateList.Add(drow); 
     } 
     else 
      hTable.Add(drow[colName], drow[colTitle]); 
    } 

    foreach (DataRow dRow in duplicateList) 
     dTable.Rows.Remove(dRow); 

    return dTable; 
} 

但這種方式給我一個錯誤: 項目已添加。重點在詞典:「不完整」 C#

現在我知道,你不能有重複的鍵鍵,值對。有沒有人知道解決這個問題的方法或者我可以用來解決這個問題的另一種方法。抱歉忘了補充說這需要添加到數據表中。

乾杯,詹姆斯

回答

0

嘗試使用Dictionnary或Dictionnary,而不是一個Hashtable的。

如果你想保留的所有狀態使用字典>。關鍵是課程,您將在值部分(列表)中擁有狀態列表。

如果我把你的代碼,這將是這樣的:

Dictionary<string, List<string>> values = new Dictionary<string, List<string>>(); 
     foreach (DataRow drow in dTable.Rows) 
     { 

      if (values.ContainsKey(drow[colName])) 
      { 
       if(values[row[colName]] == null) 
        values[row[colName]] = new List<string>(); 

       if (!values[row[colName]].Contains(drow[colTitle])) 
        values[row[colName]].Add(drow[colTitle]); 
      } 
     } 

     return values; 

希望這有助於。

+0

我的字典定義沒有通過遺憾 –

+0

如果(values.Contains(卓爾[COLNAME])&& values.Contains(卓爾[colTitle]))這行給出了一個錯誤。不包含定義包含 –

+0

我更改了代碼以糾正問題 –