Это поведение записано в реализации DataGridViewComboBoxEditingControl
. К счастью, это может быть отменено. Во-первых, вы должны создать подкласс вышеупомянутого элемента управления для редактирования, переопределяя метод OnSelectedIndexChanged
:
protected override void OnSelectedIndexChanged(EventArgs e) {
base.OnSelectedIndexChanged(e);
EditingControlValueChanged = true;
EditingControlDataGridView.NotifyCurrentCellDirty(true);
EditingControlDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
Это обеспечит правильное уведомление DataGridView
об изменении в выборе элемента в поле со списком, когда оно произойдет.
Затем необходимо создать подкласс DataGridViewComboBoxCell
и переопределить свойство EditType
, чтобы возвратить подкласс управления редактированием сверху (например, return typeof(MyEditingControl);
). Это обеспечит создание правильного элемента управления для редактирования, когда ячейка переходит в режим редактирования.
Наконец, вы можете установить свойство CellTemplate
вашего DataGridViewComboBoxColumn
для экземпляра подкласса ячейки (например, myDataGridViewColumn.CellTemplate = new MyCell();
). Это обеспечит использование правильного типа ячейки для каждой строки в сетке.