Я застрял в проблеме, с которой обычно даже не сталкивался бы, но в этом случае это кажется большим делом.
Прежде всего, чтобы избежать путаницы, хотя я уже написал это в заголовке, мы говорим о Windows Forms (не о WPF и не о веб-приложениях).
У меня есть DataGridView, источник данных которого поступает из свойства навигации объекта (entity Framework 5, Code First).
Эта сетка данных имеет, среди прочего, поля «IdEquipment» и «IdConfiguration». Оба столбца имеют тип DataGridViewComboBoxEditingControl. IdEquipment заполняется элементом управления BindingSource, который «Оборудование»:
_context.Equipments.Local.ToBindingList();
Таблица «Конфигурация» в качестве внешнего ключа «IdEquipment» и поле со списком должны быть подмножеством этой таблицы в каждой строке сетки данных. Для этого после нескольких неудачных тестов и поиска здесь, в SO и где-то еще, я нашел это решение с особым акцентом на dataGridView1_EditingControlShowing
и dataGridView1_CellValueChanged
.
Кажется, это правильное направление, однако проблема заключается в том, что когда я фильтрую источник данных поля со списком IdEquipment (это также еще один элемент управления BindingSource, привязанный к _context.Configurations.Local.ToBindingList();
.
Я где-то читал, что, поскольку я работаю с сущностями, я должен вызывать .ToList()
, а не .ToBindingList()
, но даже в этом случае фильтрации не происходит (и в любом случае я думаю, что BindingList все еще в порядке).
Другой вариант, который я мог бы использовать, — воспользоваться выбранным значением/объектом первого поля со списком и получить свойство навигации Equipment.Configuration, но я понятия не имею, как это сделать с помощью DataGridViewComboBoxEditingControl.
Любая помощь?