0

您好,我有一个网格,其中填充了他们参加的教育课程的用户结果。对于每个用户,他们都有自己的网格,显示他们完成的每门课程以及他们每次尝试课程时的状态。例如:

课程名称 | 状态
Excel, 不完整的
肢体语言, 完整的
肢体语言, 放弃的
肢体语言, 不完整的
肢体语言, 完成的
肢体语言, 完成

删除重复项后,表格应如下所示:

课程名称 | 状态
Excel, 不完整的
肢体语言, 完整的
肢体语言, 放弃的
肢体语言, 不完整

我试图这样做:

公共静态数据表 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

尝试使用 Dictionnary 或 Dictionnary 而不是 Hashtable。

如果要保留所有状态,请使用 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 回答