2012-07-02 27 views
6

Tengo DataGridView. En algunas celdas agrego algunos datos. Si la celda, que estoy editando actualmente, está vacía y estoy a punto de abandonarla, se muestra un mensaje "bla-bla-bla" al usuario y la celda en modo edición debe recibir el foco nuevamente.Cómo cancelar el evento CellEnter/CellLeave en C#?

Para hacer esto estoy usando CellEnter, CellLeave, CellEndEdit etc. y quiero cancelar esos eventos después de verificar el valor ingresado en la celda. Pero soy novato y no funciona. Por favor, ayúdame. Estaría feliz de ver algún consejo.

Aquí hay una variante de mi código. Intenté con otros eventos, pero es muy ingenuo.

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dataGridView1[e.ColumnIndex, e.RowIndex] == null) 
    { 
     MessageBox.Show("Empty cell!"); 

     dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex]; 
    } 
} 
+0

Muéstranos tu código para que la ayuda se base en ello. – HichemSeeSharp

+0

@cppanda> ¿esto necesita ser resuelto por código? Sí – stepler

+0

¿Entonces lo que quiere es no permitir que el usuario abandone el modo de edición si el valor ingresado no es un "valor aceptable" para usted? –

Respuesta

6

Creo que debe buscar una solución basada en el evento CellValidating del DataGridView.

Se activa justo cuando el DataGridView está a punto de salir del modo de edición y le permite no aceptar el valor que ha ingresado el usuario. Para rechazar el valor ingresado, en el código del controlador de eventos, debe establecer e.Cancel en True.

private void dataGridView1_CellValidating(object sender, 
    DataGridViewCellValidatingEventArgs e) 
{ 

    if (!IsValueValid(e.FormattedValue)) 
    { 
     e.Cancel = true; 

     MessageBox.Show("Not Valid!"); 
    } 
} 

Hay muchos ejemplos en la web, se puede encontrar directamente en la documentación de DataGridViewCellValidatingEventArgs en el MSDN. Echa un vistazo también a la documentación de la propiedad DataGridViewCellValidatingEventArgs.FormattedValue

Tenga en cuenta que el método IsValueValid(Object o) no es parte del componente DataGridView, es sólo un ejemplo de nombres, debe declararlo en el código y proporcionar un cuerpo para la validación .

+1

ahora lo intenté. Funciona como yo quería. ¡GRACIAS! – stepler

0

Usted puede no desactivar los eventos DataGrids CellEnter CellLeave para ciertas células o filas.

Lo que podría hacer es Almacenar una lista <> de celdas que están vacías/donde no debe invocarse el evento entrar/salir, y antes de hacer cosas en CellEnter/CellLeave comprobar si la celda está en la lista de celdas deshabilitadas .

+1

Lo pensaré. Gracias. – stepler

Cuestiones relacionadas