Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Перехват изменения значения combobox в datagridvie


Автор: igluk 16.10.2010, 21:31
Такое дело: есть DataGridView, в нём есть столбец DataGridViewComboBoxColumn.
Мне нужно, чтобы при изменении ячейки в этом столбце отрабатываолся некоторый сценарий, который смотрит, что было выбрано и принимает некоторые решения. Как я это реализую:

1: при загрузке формы


Код

        dataGridView1.EditingControlShowing += _dgv_EditingControlShowing;



2: реализую _dgv_EditingControlShowing

Код

        private void _dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            DataGridViewComboBoxEditingControl combo =(DataGridViewComboBoxEditingControl)e.Control;
            combo.SelectedValueChanged += ComboBox_SelectedValueChanged;
        }


3: ComboBox_SelectedValueChanged

Код

        void ComboBox_SelectedValueChanged(object sender, EventArgs e)
        {
                MessageBox.Show("Что-то делаем");
        }



Врезультате, при изменении значения, моя функция ComboBox_SelectedValueChanged отрабатывается несколько раз. При чём первый раз - 2 раза, потом 3 и так далее...

Понимаю, что дело в том что я назначаю нового обработчика эвента каждый раз, но как по-другому сделать? или как избавиться о этой ошибки?
Код



Автор: Мурлыкатам_ 21.10.2010, 17:26
Можно сделать по другому, обрабатывать он клик, при клике ты получаешь координаты ячейки, берешь контрол из ячейки и проверяешь его значение или делаешь че хош с ним.

Хотя может я и не прав smile Няма студии под рукой глянуть..

Автор: sharp2005 12.11.2010, 12:25
У меня вот так заработало:
Код

private void _dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
       DataGridViewComboBoxEditingControl combo =(DataGridViewComboBoxEditingControl)e.Control;
       combo.SelectionChangeCommitted -= combo_SelectionChangeCommitted;
       combo.SelectionChangeCommitted += combo_SelectionChangeCommitted;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)