программно вызвать событие EditingControlShowing в DataGridView

есть функция которая грузит данные в таблицу

private void LoadGridMain()

один из столбцов содержит DataGridViewComboBox.

Включено событие EditingControlShowing

ComboBox cb;
private Point lastcell;
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        cb = e.Control as ComboBox;
        if (cb != null)
        {
            lastcell = dataGridView1.CurrentCellAddress;
            cb.DrawMode = DrawMode.OwnerDrawFixed;
            cb.DrawItem += new DrawItemEventHandler(cb_DrawItem);
            cb.DropDownClosed += new EventHandler(cb_DropDownClosed);
            cb.SelectedIndexChanged += new EventHandler(Set_value_ComboSelectionChanged);
        }
    }

Событие cb.DrawItem строит сложное представление выпадающего списка.

Событие cb.SelectedIndexChanged обрабатывает выбор. В конце события надо вызвать перегрузку всех данных в таблице повторным вызовом LoadGridMain(). И вот тут происходит следующая проблема - Если выбрать мышкой любую другую ячейку, то проблемы нет. Если тапнуть на ту же ячейку из предыдущего выбора, то программа выпадает в исключение, т.к. не вызывается EditingControlShowing и соответственно список пустой(не вызывается cb.DrawItem). Код сразу попадает в cb.SelectedIndexChanged). Не могу добиться повторного запуска EditingControlShowing. Пробовал играться с

dataGridView1.EndEdit();
dataGridView1.Rows[lastcell.Y].Cells[lastcell.X].Selected = false;
dataGridView1.ClearSelection();
dataGridView1.BeginEdit(true);

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

UPG написал такой костыль, но сути так и не понял

private void Set_value_ComboSelectionChanged(object sender, EventArgs e)
{
// код функции .....
  LoadGridMain();
  dataGridView1_EditingControlShowing(this, new DataGridViewEditingControlShowingEventArgs(cb, dataGridView1.Rows[lastcell.Y].Cells[lastcell.X].Style));
}

получается dataGridView1_EditingControlShowing вызывается первый раз при выборе ячейки(как и должно быть), второй раз при выборе значения из списка. При клике на туже ячейку происходит опять вызов dataGridView1_EditingControlShowing. Что происходит при вызове "второй" раз?

UPD2 Подсказка в комментариях помогла. Достаточно отписаться перед перезагрузкой данных

private void Set_value_ComboSelectionChanged(object sender, EventArgs e)
{
 // код функции .....
 cb.DrawItem -= new DrawItemEventHandler(cb_DrawItem);
 cb.DropDownClosed -= new EventHandler(cb_DropDownClosed);
 cb.SelectedIndexChanged -= new EventHandler(Set_value_ComboSelectionChanged);
LoadGridMain();
dataGridView1.CurrentCell = dataGridView1.Rows[lastcell.Y].Cells[lastcell.X];
}

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