如何使用Dictionary <string,list <string>&gt;的内容填充列表视图在C#</string,list <string>

时间:2010-06-22 10:09:48

标签: c# winforms listview dictionary

我有一个词典

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

我需要用Dictionary的内容填充listView

例如“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 个答案:

答案 0 :(得分:5)

我非常确定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);
}

是否需要这一切。

答案 1 :(得分:1)

您可以为字典中的值项实现自己的集合,并覆盖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>();

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

答案 2 :(得分:1)

        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++;

        }