miércoles, 25 de enero de 2012

Columnas Especificas DataGridView


En el trabajo con el control del Datagridview encontramos cierta necesidad a cubrir, como que solo permita edición unas columnas y otras no, los focos ubicados específicamente en una columna.
Estas dos preguntas se les darán solución con nuestro ejemplo que se encuentra descargable la fuente en la parte inferior de este post, cabe agradecerles y esperar que les sea de utilidad.
Creamos nuestra Aplicación en visual Studio 2010, es una aplicación de escritorio y llamamos nuestro formulario frPrincipal.


Agregamos un control Datagridview y empezamos a modificar sus propiedades. Encontramos EditMode la cual especifica cómo se va a realizar la edición de las celdas. Para nuestra necesidad la vamos a programar nosotros entonces usamos Datagridview.EditMode = EditProgrammatically;



Una vez modificada esta propiedad, la forma de modificar las celdas anteriormente utilizadas no son permitidas (F2 y/o doble clic sobre la celda). Se crearon manualmente las columnas para tenerlas en el diseñador.


Para efectos de este ejemplo vamos a crear 4 columnas y 5 registros (5 filas), en la propiedad columns del control encontramos la pantalla que nos permite realizar la creación de ID, Nombre, Costo, Existencias.

Los datos de este ejemplo se llenan manualmente con estas líneas de código.




Ya tenemos nuestra aplicación con los datos cargados.
  


Ahora tenemos queremos que cuando le de clic en las columnas Nombre y Existencias, estas se habiliten para su edición, pero queremos mantener Id y Costo como “No editables”.

Usamos el evento CellClick que tiene lugar cuando se da clic en cualquier parte de la celda para poder llevar a cabo nuestra tarea. Entonces tenemos:



Para saber la posición en la que se dio clic usamos una variable para alojar la fila en donde se desato el evento y ponemos la condición que si no se está efectuando en las columnas permitidas este evento no tenga efecto y no se ponga editable, pero si está en una de las columnas editables usamos la propiedad BeginEdit(true) para poner la celda especifica en modo editable.

En el punto de la pregunta que decía que quería una modificación vertical para evitar errores del usuario tenemos que usar el evento KeyUp del datagridview para que una vez el Enter sea “soltado” por el usuario, se posicione en la fila siguiente en un sentido descendente.



Para esto usamos una condición para saber si se están presionando las teclas que vamos habilitar para la validación del movimiento.

Finalmente movernos entre las dos columnas que nos interesa editar usamos en evento KeyDown del datagridview para que tan pronto sea presionado haga lo que necesitamos y no se preste para otro evento no deseado.


Tenemos una matriz con unos parámetros específicos de funcionamiento y vamos a controlar que se lleva a cabo en nuestro control.



Descargar Fuente


Saludos y Gracias.
JamC.

No hay comentarios:

Publicar un comentario