代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何在C中用dictionary<string,list<string>>的内容填充列表视图#

  •  2
  • Thorin Oakenshield  · 技术社区  · 15 年前

    我有一本字典

    Dictionary<string, List<string>> SampleDict = new Dictionary<string, List<string>>();
    

    我需要用字典的内容填写一个列表视图

    例如,“sampledict”包含

    One    A
           B
           C
    
    Two    D
           E
           F
    

    ListView的填充方式应为

     S.No           Item       SubItem
    
      1             One           A,B,C
      2             Two           D,E,F
    

    现在我用for循环的方法

    喜欢

    List<String> TepmList=new List<String>(SampleDict.Keys); 
    
    for(int i=0;i<TepmList.Count;i++)
    {
        listView1.Items.Add((i+1).ToString());
        listView1.Items[i].SubItems.Add(TepmList[i]);
        List<String>Lst=SampleDict[TepmList[i]])
        String Str="";
        int K=0;
        for(int j=0;j<Lst.Count;j++)
        {
            string s=Lst[j];
            k++;
            if(k==1)
                Str=s;
            else
                Str=","+Str;
        }
        listView1.Items[i].SubItems.Add(Str);
    }
    

    有没有其他方法可以像数据绑定那样做到这一点?

    事先谢谢。

    3 回复  |  直到 14 年前
        1
  •  5
  •   Hans Olsson    15 年前

    我相当肯定。 ListView 不支持绑定到 Dictionary 但是你可以简化你的代码:

    foreach(KeyValuePair<string, List<string>> kvp in SampleDict)
    {
         ListViewItem lvi = listView1.Items.Add(kvp.Key);
         string temp = string.Join(", ", kvp.Value);
         lvi.SubItems.Add(temp);
    }
    

    这就是所需要的。

        2
  •  1
  •   PjL    15 年前

    可以为字典中的值项实现自己的集合,并重写ToString()方法以提供以逗号分隔的项列表。

    class StringList : List<string> {
       public override string ToString() {
          string result = string.Empty;
          foreach( string item in this ) {
             if( result.Length != 0 ) {
                result += ",";
             }
             result += item;
          }
          return result;
       }
    }
    

    本质上,您只是将相同的代码移动到一个更好的地方,但它将允许更好的重用。您的字典将变为:

    Dictionary<string, StringList> SampleDict = new Dictionary<string, StringList>();
    

    之后,上面的代码会简化很多。

        3
  •  0
  •   Thorin Oakenshield    14 年前
            int Index=0;
            foreach(KeyValuePair<String,List<String>>KVP in Dict)
            {
                ListViewItem LVI = listView1.Items.Add((Index + 1).ToString());
                LVI.SubItems.Add(KVP.Key);
                LVI.SubItems.Add(KVP.Value.Select(X => X).Aggregate((X1, X2) => X1 + "," + X2));
                Index++;
    
            }