2012-02-06 3 views
0

У меня есть словарь, который объявлен таким образом:Группировка элементов в списке Просмотр

Dictionary myDictionary<string, List<FCPort>> = new Dictionary<string, List<FCPort>>(); 

ключ является строка, представляющая имя коммутатора. Значение представляет собой список объектов порта для этого коммутатора. Я пытаюсь добавить элементы в словарь в ListView с этим кодом:

foreach (KeyValuePair<string, List<FCPort>> portpair in results) 
     {    
      ListViewItem item1 = new ListViewItem(portpair.Key); 
      foreach (FCPort port in portpair.Value) 
      { 
       item1.SubItems.Add(port.FCIDList[0]); 
       item1.SubItems.Add(port.WWPNList[0]); 
       item1.SubItems.Add(port.TextSerializePortName()); 
       this.ResultsListView.Items.Add(item1); 

      } 
     } 

Однако, я получаю сообщение об ошибке во время выполнения в основном говорят, что у меня есть дубликат элемента в списке. В этом есть смысл. Я пытаюсь группировать по ключу дикториала (имя переключателя). Есть ли способ каким-либо образом группировать элементы в списке или динамически добавлять списки в GroupBox на лету? В основном добавить новый ListView для каждого ключа в словаре? Я все еще изучаю C#, и формы все еще новы.

ответ

0

Вы можете использовать Поиск по LINQ, чтобы сгруппировать по вашему ключу. и расширьте свой portpair до перечислимого при добавлении в подпрограммы списка.

Это фрагмент кода, который я иногда надеялся вам помочь.

Dictionary<String, Country> dict = new Dictionary<string, Country>(); 
dict.Add("Toronto", Country.Canada); 
dict.Add("New York", Country.US); 
dict.Add("Vancover", Country.Canada); 
dict.Add("Seattle", Country.US); 
dict.Add("Fredericton", Country.Canada); 

Lookup<Country,String> lookup = (Lookup<Country,String>) dict.ToLookup(pair =>pair.Value, pair => pair.Key); 

foreach (var countryGroup in lookup) 
{ 
    item = new ListViewItem(countryGroup.Key.ToString()); 
    item.SubItems.Add(string.Format("{0}", string.Join(",", countryGroup.Select(s => "@" + s)))); 
    lv.Items.Add(item); 
    item = null; 
} 
Смежные вопросы