我有一个 DataGridView,它的 DataSource 是一个 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 将输出“Is Selected”。
同样,当用户再次检查时,该框被清除,并且 selectionTableRowChanged 输出“未选中”。
这是我遇到问题的地方:
当用户双击复选框时,复选框被选中,RowChanged 事件被调用(“Is Selected”),然后复选框被清除,不会调用相应的 RowChanged 事件。现在 RowChanged 事件的订阅者不同步。
我现在的解决方案是继承 DataGridView 并覆盖 WndProc 以吃掉 WM_LBUTTONDBLCLICK,因此任何双击控件都会被忽略。有更好的解决方案吗?