Задача: отловить изменение выбранного значения в колонке DataGridViewComboBoxColumn. Чтобы достучаться до сидящих в ячейках грида ComboBox надо использовать событие DataGridView.EditingControlShowing, из которого мы получим экземпляр класса DataGridViewEditingControlShowingEventArgs , свойство Control которого в свою очередь уже можно конвертировать в ComboBox. Событие может вызываться для всех ячеек и неоднократное, так что нам надо будет поверять, на какой именно столбец мы попадаем и перед записью обработчика в с полученный ComboBox сначала удалть его оттуда на тот случай, если мы уже записывали наш обработчик в данный комбо-бокс. Просто, понятно и интуитивно, не так ли?
private void _testDataGridView_EditingControlShowing ( object sender, DataGridViewEditingControlShowingEventArgs e) { if (_testDataGridView.CurrentCell.ColumnIndex == 1 ) // 1 - индекс колонки с комбо-боксами { ComboBox cellComboBox = (ComboBox) e.Control; if (cellComboBox != null) { // обработчик уже мог записаться при предыдущем вызове этого события, так что удаляем cellComboBox. SelectionChangeCommitted -= new EventHandler (cellComboBox_SelectionChangeCommitted); // и наконец записываем cellComboBox.SelectionChangeCommitted += new EventHandler (cellComboBox_SelectionChangeCommitted); } } }
Получить выбранное в комбо-боксе значение можно следующим образом
void cellComboBox_SelectionChangeCommitted (object sender, EventArgs e) { ComboBox cellComboBox = (ComboBox) _testDataGridView. EditingControl; int testId = Convert.ToInt32 (cellComboBox. SelectedValue); }
datagrid combobox column selection changed event
DatagridView combobox selection change
Здравствуйте Ведомир. Извините, но Ваш код работает только для случая testId = 0, для других значений нет
И еще. Вы свой код протестировали бы прежде чем для новичков выкладывать. И ещё раз извините, если сказал что не так.
int testId = Convert.ToInt32 (cellComboBox. SelectedValue) здесь вообще не нужно (лишняя строка вводящая в заблуждение). Правильнее вместо этого как продолжение кода написать switch (cellComboBox.SelectedIndex) { код }.
Большое спасибо. Все прекрасно работает.