Определить выбор одного и того же элемента в DataGridViewComboBoxCell

У меня есть сетевое представление данных с комбинированным ящиком данных в приложении winform C#. Я легко могу захватить, когда новый элемент выбран, потому что происходит событие CellValueChanged. Тем не менее, я хотел бы иметь возможность определять, когда открыт комбинированный список, но пользователь выбирает то же значение, которое уже было выбрано. Как я могу захватить это?

2 ответа

Решение

Сочетание EditingControlShowing работает событие и некоторые события со списком1.

EditingControlShowing позволяет нам получить доступ к встроенному элементу управления со списком:

dataGridView1.EditingControlShowing += new 
    DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);


void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox control = e.Control as ComboBox;

    if (control != null)
    {            
        control.DropDown += new EventHandler(control_DropDown);
        control.DropDownClosed += new EventHandler(control_DropDownClosed);
    }
}

Я добавил частную переменную уровня класса в форму, чтобы сохранить выбранный индекс поля со списком.

void control_DropDown(object sender, EventArgs e)
{
    ComboBox c = sender as ComboBox;

    _currentValue = c.SelectedIndex;
}

void control_DropDownClosed(object sender, EventArgs e)
{
    ComboBox c = sender as ComboBox;
    if (c.SelectedIndex == _currentValue)
    {
        MessageBox.Show("no change");
    }
}

1. Это решение срабатывает каждый раз, когда поле со списком открывается и закрывается - если вы хотите что-то еще (например, когда поле со списком фиксирует это изменение в сетке), обновите свой вопрос, описывая точное поведение.

Попробуйте увидеть с событием: - DropDown - DropDownClosed

Другие вопросы по тегам