Encontré que la solución de @Killercam funcionaba, pero era un poco dudosa si el usuario hacía doble clic demasiado rápido. No estoy seguro si otros también encontraron ese caso. Encontré otra solución aquí .
Utiliza las redes de datos CellValueChanged
y CellMouseUp
. Changhong explica que
"La razón de esto es que el evento OnCellvalueChanged no se activará hasta que DataGridView crea que ha completado la edición. Esto tiene sentido para una columna TextBox, ya que OnCellvalueChanged no [se molestaría] en activarse con cada pulsación de tecla, pero no [ tiene sentido] para un CheckBox ".
Aquí está en acción a partir de su ejemplo:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
Y el código para indicarle a la casilla de verificación que ha terminado de editar cuando se hace clic en él, en lugar de esperar hasta que el usuario abandona el campo:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
Editar: un evento de DoubleClick se trata por separado de un evento MouseUp. Si se detecta un evento de DoubleClick, la aplicación ignorará el primer evento MouseUp por completo. Esta lógica debe agregarse al evento CellDoubleClick además del evento MouseUp:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
Evento?