添加SortedDictionary

时间:2014-10-21 17:53:18

标签: c# collections sorteddictionary

如果表名存在于与数组列表相同的键添加记录中,我想将表名作为字符串和表值添加为arraylist ...此处显示键已存在。我可以修改的地方:

SortedDictionary<string, ArrayList> DealInfo = new SortedDictionary<string, ArrayList>();
ArrayList Deal = new ArrayList();
string DealName=string.Empty;
foreach (DataTable table in RecentAddedDeal.Tables)
{
    foreach (DataRow dr in table.Rows)
    {
        if (!DealInfo.ContainsKey(Convert.ToString(dr["DealTab"])))
        {
            DealName = Convert.ToString(dr["DealTab"]);

        }
        Deal.Add(dr);
        DealInfo.Add(DealName, Deal);
    }
}

1 个答案:

答案 0 :(得分:0)

很难准确说出你想要什么,因为你的描述说你想使用TableName作为键,但你的代码是从行中添加一列作为键。

认为TableName应该是关键,这样的事情应该有效:

var dealInfo = new SortedDictionary<string, List<DataRow>>();

foreach (DataTable table in RecentAddedDeal.Tables)
{
    if (!dealInfo.ContainsKey(table.TableName))
    {
        dealInfo.Add(table.TableName, table.Rows.Cast<DataRow>().ToList());
    }
}

如果您想要关键字的每一行中的列,您可以执行以下操作:

var dealInfo = new SortedDictionary<string, List<DataRow>>();

foreach (DataTable table in RecentAddedDeal.Tables)
{
    foreach (DataRow row in table.Rows)
    {
        var dealName = row["DealTab"].ToString();

        if (dealInfo.ContainsKey(dealName))
        {
            dealInfo[dealName].Add(row);
        }
        else
        {
            dealInfo.Add(dealName, new List<DataRow> {row});
        }
    }
}

要使用特定DealName的行中的数据填充ListView,您可以找到该交易名称的字典条目并以这种方式访问​​行列表:

foreach (DataRow row in dealInfo["SomeDealName"])
{
    // Here you have access to the rows where row["DealTab"] == "SomeDealName"
    // You can fill a list view with some column value from the row like:
    listView1.Add(row["SomeColumnName"].ToString());
}