0

こんにちは、ユーザーが参加した教育コースの結果が入力されているグリッドがあります。ユーザーごとに、行った各コースとコースを試すたびにステータスを示す独自のグリッドがあります。例えば:

コースタイトル | ステータス
エクセル、不完全な
ボディ ランゲージ、完全な
ボディ ランゲージ、放棄された
ボディ ランゲージ、不完全な
ボディ ランゲージ、完成した
ボディ ランゲージ、完成

重複を削除すると、テーブルは次のようになります。

コースタイトル | ステータス
エクセル、不完全な
ボディ ランゲージ、完全な
ボディ ランゲージ、放棄された
ボディ ランゲージ、不完全

私はこのようにしようとしていました:

public static DataTable RemoveDuplicateRows(DataTable dTable, string colName, string 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#

キーと値のペアでキーを重複させることはできないことがわかりました。これを回避する方法、またはこの問題を解決するために使用できる別の方法を知っている人はいますか? これをデータテーブルに追加する必要があることを追加するのを忘れて申し訳ありません。

乾杯、ジェームズ

4

1 に答える 1

0

Hashtable の代わりに Dictionnary または Dictionnary を使用してみてください。

すべてのステータスを保持する場合は、Dictionary> を使用します。キーはコースで、値の部分(リスト)にステータスのリストがあります。

私があなたのコードを取ると、次のようになります:

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;

お役に立てれば。

于 2012-10-22T15:07:22.220 に答える