2010-06-22 72 views
2

我有一個字典如何填補Dictonary <字符串列表<String>>內容的列表視圖在C#

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

我需要補的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); 
} 

是否有任何其他方式做到這一點像數據綁定?

在此先感謝。

+0

你想在GUI中使用哪種技術? WPF,WinForm ... – DHN 2010-06-22 10:15:48

+0

Win Forms ...... – 2010-06-22 10:17:38

回答

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

     } 
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

您可以爲自己的字典中的值項目實現自己的集合,並覆蓋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>(); 

之後你的代碼會簡化很多。

+0

您可以使用'using'關鍵字來做同樣的事情,而不需要定義自己的類,即定義您即時輸入:'使用列表 = StringList;'。你的循環也等於'String.Join'方法。 – abatishchev 2010-06-22 10:57:09

+0

但是使用一個StringBuilder – MaLio 2010-06-23 08:31:37

相關問題