Отслеживаем изменения выбранного значения в колонке ComboBox DataGridView (DataGridViewComboBoxColumn)

Задача: отловить изменение выбранного значения в колонке 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


Комментарии

Отслеживаем изменения выбранного значения в колонке ComboBox DataGridView (DataGridViewComboBoxColumn) — Комментарии (4)

  1. Здравствуйте Ведомир. Извините, но Ваш код работает только для случая testId = 0, для других значений нет

  2. И еще. Вы свой код протестировали бы прежде чем для новичков выкладывать. И ещё раз извините, если сказал что не так.

  3. int testId = Convert.ToInt32 (cellComboBox. SelectedValue) здесь вообще не нужно (лишняя строка вводящая в заблуждение). Правильнее вместо этого как продолжение кода написать switch (cellComboBox.SelectedIndex) { код }.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>