событие DataGridViewComBox для выбора item без изменения

Есть DataGridView с двумя столбцами. первый text, второй combobox. Нужно выбрать значение из второго столбца и записать в первый. Если использую событие CellValueChanged, то всё хорошо ровно до того момента, как выбрать надо текущее значение. событие при этом не отрабатывает. Естественно, если combobox содержит всего одну запись, то вызвать событие вообще не удаётся. Можно это как-то поправить?

В поисках решения наткнулся на костыли в виде события EditingControlShowing, в котом ячейку представляют как обычный combox. Но тут же получил две другие проблемы. Во первых, при открытии списка указатель встаёт на первое значение и отрабатывает последующий код по присвоению первому столбцу значения. Но иногда мне надо просто посмотреть возможный выбор без присвоения. Вторая проблема, что EditingControlShowing уже используется для отображения tooltip в этих же ячейках этого же грида, но в другой таблице.

    ComboBox cb;
            private void dataGridView1_EditingControlShowing_lang(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (dataGridView1.CurrentCell is not DataGridViewComboBoxCell) return;
                cb = e.Control as ComboBox;
                if (cb != null)
                    {
                        cb.SelectedIndexChanged -= new EventHandler(LastColumnComboSelectionChanged);
// в этом блоке LastColumnComboSelectionChanged вызывается ОДИН раз. Я не могу понять почему. 
// получается событие EditingControlShowing обрабатывается позже LastColumnComboSelectionChanged?
                        cb.DrawMode = DrawMode.OwnerDrawFixed;
                        cb.DrawItem += new DrawItemEventHandler(cb_DrawItemLang);
                        cb.DropDownClosed += new EventHandler(cb_DropDownClosed);
                    }
    
            }
    
            private void dataGridView1_EditingControlShowing_name(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (dataGridView1.CurrentCell is not DataGridViewComboBoxCell) return;
                ComboBox cb = e.Control as ComboBox;
                if (cb != null)
                {
                    // first remove event handler to keep from attaching multiple:
                    //cb.SelectedIndexChanged -= new EventHandler(LastColumnComboSelectionChanged);
    
                    // now attach the event handler
                    cb.SelectedIndexChanged += LastColumnComboSelectionChanged;
                }
            }

я так понимаю, что всё ссылается на экземпляр DataGridViewEditingControlShowingEventArgs, но в упор не понимаю, как отключить LastColumnComboSelectionChanged до попадания EditingControlShowing. Пока вижу возможность обработать условия в конечном LastColumnComboSelectionChanged, но таких блоков в программе много и править каждый не есть хорошая идея.


Ответы (0 шт):