0

Я застрял в проблеме, с которой обычно я бы даже не сталкивался, но в этом случае это кажется большим делом.Cascading comboboxes в Windows Form DataGridView

Прежде всего, во избежание путаницы, хотя я уже написал это в названии, мы говорим о Windows Forms (а не в WPF, ни в веб-приложениях).

У меня есть DataGridView, чей источник данных исходит из свойства навигации объекта (сущность Framework 5, Code First).

Этот datagrid имеет среди других полей «IdEquipment» и «IdConfiguration». Оба столбца имеют тип DataGridViewComboBoxEditingControl. IdEquipment населен управлением BindingSource, что «Оборудование»:

_context.Equipments.Local.ToBindingList(); 

«Конфигурация» таблица в качестве внешнего ключа «IdEquipment» и выпадающего списка должна как подмножество этой таблицы в каждой строке DataGrid. Чтобы сделать это, после некоторых неудачных тестов и поиска здесь в SO и где-то еще, я нашел this solution, с особым фокусом на dataGridView1_EditingControlShowing и dataGridView1_CellValueChanged.

Это, кажется, правильное направление, однако, проблема в том, когда я выбирать источник данных из IdEquipment выпадающего списка (то есть и другой контроль BindingSource привязан к _context.Configurations.Local.ToBindingList();.

Я где-то читал, что так как я работать с юридическими лицами, я должен позвонить .ToList(), а не .ToBindingList(), но даже в этом случае фильтрация не происходит (и в любом случае я думаю, что BindingList все еще хорошо).

Другой вариант я мог бы использовать это воспользуйтесь выбранным значением/сущностью первого combobox и получите свойство navigation.Configuration navigation, но я не имею понятия ho w сделать это с помощью DataGridViewComboBoxEditingControl.

Любая помощь?

ответ

1

После нескольких часов работы я нашел решение, которое наилучшим образом относится к моим потребностям: я не знаю, является ли это решением.

  • Удалены все элементы управления BindingSource, используемые в поле со списком.
  • В DataGrid DataBindingComplete event: сконфигурирован источник данных обеих комбо с нефильтрованным списком и заданы свойства DisplayMember и DisplayValue (оба списка имеют первый элемент «null»).
  • В DataGrid EditingControlShowing: изменил источник данных второй комбо с фильтрованным списком на основе текущего значения IdEquipement (если есть) и сохранил первый нулевой элемент.
  • На DataGrid CellValueChanged случая: если измененная IdEquipement столбца ID, с обнулить значение столбца, содержащего IdConfiguration

Это, до сих пор работает. Я надеялся, что проще достичь такого же результата, но, насколько я вижу, вариантов нет.

+0

Я буду отмечать свой собственный ответ, как принято, если я не получу лучшего в течение 24 часов. –

+0

Я не тщательно проанализировал, что вы написали, но выглядит правильно. В файле DataGridView есть пример того, чего вы хотите, - стоило бы вам проверить, что они рекомендуют, чтобы убедиться, что вы не пропустили никаких трюков. Вот URL загрузки: http: // www.google.co.uk/url?sa=t&rct=j&q=datagridview%20faq&source=web&cd=2&ved=0CD8QFjAB&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F5%2F6%2F4%2F5646742C-3EB7-48F7- BFB3-CC295D618CF9% 2FDataGridView% 2520FAQ.doc & е = EJg4Ud3CH47ItAaVr4CgAw & USG = AFQjCNHE0C79uGnD14VrXWm07wvfhzPWUQ & BVM = bv.43287494, d.Yms –

+0

Единственной информация о каскадном Наримере точно такой же код, который я связан в моем вопросе, и что вызывает у меня вопросы, поэтому я не» Посмотрите, как это может мне помочь. –