У меня есть DataGridView, источником данных которого является DataTable. Этот DataTable имеет логический столбец, который интерпретируется как флажок в DataGridView.
employeeSelectionTable.Columns.Add("IsSelected", typeof(bool));
...
employeeSelectionTable.RowChanged += selectionTableRowChanged;
dataGridViewSelectedEmployees.DataSource = employeeSelectionTable;
...
private void selectionTableRowChanged(object sender, DataRowChangeEventArgs e)
{
if ((bool)e.Row["IsSelected"])
{
Console.Writeline("Is Selected");
}
else
{
Console.Writeline("Is Not Selected");
}
break;
}
Когда пользователь щелкает по флажку один раз, он проверяется, и selectionTableRowChanged выводит «Выбрано».
Точно так же, когда пользователь проверяет его снова, поле очищается, и selectionTableRowChanged выводит «Is Not Selected».
Вот где у меня проблема:
Когда пользователь дважды щелкает по флажку, флажок устанавливается, вызывается событие RowChanged («Выбрано»), затем флажок сбрасывается, и соответствующее событие RowChanged не вызывается. Теперь подписчик на событие RowChanged не синхронизирован.
Мое решение прямо сейчас - создать подкласс DataGridView и переопределить WndProc, чтобы съесть WM_LBUTTONDBLCLICK, поэтому любой двойной щелчок по элементу управления игнорируется. Есть ли лучшее решение?