программно вызвать событие 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];
}