Несколько комбинированных списков со списком объектов - PullRequest
1 голос
/ 05 августа 2009

У меня есть 3 ComboBox в форме, список объектов. Мне нужно связать выпадающие списки с 3 различными членами класса из списка. (C # 3.0, .NET 3.5) Я сейчас занимаюсь этим

Title_Combo.DataSource = ListContaining.GroupBy(item => item.Title).Where(item => !item.Key.Equals(string.Empty)).ToList();

Title_Combo.DisplayMember = "Key";

Где ListConisting - это подмножество основного списка объектов. Каждый раз, когда элемент выбирается в любом из этих комбинированных списков, ListConisting заполняется на основе выбранного значения из основного списка объектов, например, и все комбинированные списки перезагружаются. 1004 *

ListContaining = ListFiles.Where(item => item.GetType().GetProperty(name).GetValue(item, null).Equals(int.Parse(Sender.SelectedItem.ToString()))).ToList();

Он отлично загружается, но следующий выбор в выпадающих списках создает исключение NullReference.

Это из-за того, что список ListContained переписывается или что-то в этом роде, я могу выяснить.

и есть ли лучший способ обработать 3 списка со списком.

Ваша помощь приветствуется.

Редакция: Я отказался от отладки этого. Но может кто-нибудь предложить способ связать 3 комбинированных списка с одним списком объектов с 3 различными свойствами. И элементы управления обновляются при изменении индекса.

Ответы [ 3 ]

1 голос
/ 05 августа 2009

Почему вы не используете дополнительные списки, в которых хранятся значения комбинированных списков?

Итак, для каждого выпадающего списка у вас есть список строк. Вы также можете хранить все эти разные списки строк в другой структуре, например в словаре.

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

1 голос
/ 05 августа 2009

Эта проблема может возникать, если тип списка вашего второго комбинированного списка - DropDown, а не DropDownList, как правило, та же ошибка в том исключении, о котором вы упоминаете.

Для второй мысли, если ваши комбинированные списки связаны друг с другом, как показано ниже:

Отношение один ко многим

  • ComboBox: CompanyGroup
  • ComboBox: Компания
  • ComboBox: Person

-> При изменении сверху вниз срабатывает нижняя. Ваш случай, как:

Отношение ко многим ко многим

  • ComboBox: Метки
  • ComboBox: Вопросы

-> Если вопрос изменяется, он запускает свои собственные теги, а если теги изменяются, он запускает только тот тег, к которому относится вопрос.

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

0 голосов
/ 06 августа 2009

Ну, я получил ответ.
Вы можете использовать подмножество объектов для привязки элемента управления, который не был причиной проблемы.
И я могу обрабатывать несколько комбинированных списков способом, описанным.

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