2011-05-11 25 views
5

Según los requisitos de diseño, el editor de cuadrícula de datos no puede ser editado directamente por el usuario. Está en modo de solo lectura. Cuando el usuario hace doble clic en la celda, la propiedad de solo lectura de datagridview se vuelve falsa y la celda acepta la entrada del teclado. Sin embargo, la entrada de teclado sin formato debe formatearse antes de entrar en la celda. Por lo tanto, interceptar los eventos KeyPress de la siguiente manera:El valor de celda Datagridview no se actualizó cuando se modificó dinámicamente

private void dgw_keyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = true; 
} 

En este punto, la celda está en modo de extracto y el modo sucio. Luego actualizo la propiedad Value en un método diferente y llamo al dgw.Refresh(), que se supone que muestra el valor actualizado en la celda. Pero no lo hará. se actualizará solo cuando la celda actual no esté sucia y no esté en modo de edición. ¿Cómo puedo forzar que la celda muestre el valor actualizado mientras todavía está en modo de edición?

¿Alguna idea?

+0

InvalidateCell()? – Dmitry

+0

No está muy claro qué es lo que quiere lograr, cómo está capturando el evento 'keypress' y luego modificando la entrada y asignándola a la grilla. Por favor, publique todo el código relevante, esto no da ninguna idea de qué causa el problema. – V4Vendetta

+0

Probé InvalidateCell() UpdateCellValue() y Refresh() en el control datagridview sin suerte. Estoy interceptando e ignorando los eventos clave del control. En cambio, tengo un gancho de teclado que registra las pulsaciones de teclas. Tomo los eventos clave capturados por el gancho del teclado, modifico los valores y los visualizo en la celda DGW. – Thracian

Respuesta

0

Es posible que pueda hacer eso implementando la interfaz IDataGridViewEditingControl. Creo que esa es la forma de obtener el mayor control sobre cómo entra y sale el modo de edición. Puede encontrar más detalles en la sección 5.11 de Mark Rideout's DataGridView FAQ (DOC)

0

Método DataGridView.EndEdit.

Confirma y finaliza la operación de edición en la celda actual.

+0

Gracias por la sugerencia, pero no ayuda. Me imaginé una solución alternativa. Al mover el foco fuera de la celda editada se actualizan automáticamente los datos en él. Luego devuelvo el foco a esa celda al instante, que es una solución bastante buena por ahora. Hay un pequeño parpadeo, ese es el único problema. – Thracian

11

Uso de abajo para actualizar el valor de la celda actual, el cambio para adaptarse a su tipo EditingControl

if (dgvMain.EditingControl is TextBox) 
{ 
    dgvMain.EditingControl.Text = dgvMain.CurrentCell.Value.ToString(); 
} 

Otro método:

llama a este método para forzar una célula para actualizar su valor de visualización en edita el modo . Esto es útil cuando un proceso externo modifica el valor de celda y desea notificar al usuario sobre el cambio, incluso cuando se pierda un cambio especificado por el usuario como resultado. details

dgvMain.RefreshEdit(); 
+0

Gracias por la respuesta. Aunque la respuesta en 3 años de edad. Me ayudó a llegar al destino. –

0

que solucionar con el código de abajo.

GrdBudgetTabOver.EndEdit() 
Cuestiones relacionadas