Задача: отловить изменение выбранного значения в колонке 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) { код }.
Большое спасибо. Все прекрасно работает.