Как заполнить представление списка содержимым Dictonary <string, List <String>> в C # - PullRequest
2 голосов
/ 22 июня 2010

У меня есть словарь

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);
}

есть ли другой способ сделать этокак привязка данных?

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 22 июня 2010

Я вполне уверен, 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 голос
/ 29 июля 2010
        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++;

        }
1 голос
/ 22 июня 2010

Вы можете реализовать собственную коллекцию для элементов значений в вашем словаре и переопределить метод 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>();

После этого ваш код значительно упростится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...