Группировка элементов в виде списка - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть словарь, который объявлен так:

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 #, а формы все еще новые.

1 Ответ

0 голосов
/ 06 февраля 2012

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

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

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;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...