Sin duda, es el control más complejo de los controles personalizados.
Cuando definimos una grid lo hacemos indicando un origen de datos (vista, tabla o colección de objetos) y definiendo sus columnas.
Hay varias maneras de trabajar con este control, veremos unos cuantos ejemplos de cómo utilizarlo, pero antes, es importante tener en cuenta:
- Utilizan una array de tipo XArrayDB para manejarse. Se puede referenciar mediante [NombreGrid].ArrayDB.
- Si queremos utilizar el grid sólo como un Array, sin que los cambios se vean reflejados en tablas, debemos poner sus propiedades SoloArray = true y Refresca = false.
- Si la propiedad Refresca = true el grid se refrescará siempre que se actualice un campo.
- Si el grid permite insertar filas recuerde que puede controlar el valor de los campos a insertar mediante la propiedad Default del campo. Se utiliza frecuentemente para controlar la inserción de campos clave o campos incrementales.
- Puede definir asistentes para los campos, de modo que al pulsar F3 en una celda con asistente le saldrá una pantalla de búsqueda.
- Si la grid tiene la propiedad CargaObjeto=False, cuando actualizamos un registro significa que NO estamos actualizando el objeto. La grid no podrá contener los campos de la tabla configurables del objeto.
- Si la grid tiene la propiedad CargaObjeto=True, cuando actualizamos un registro significa que estamos actualizando el objeto. Si el objeto tiene campos configurables (por lo tanto una tabla Conf_[Objeto]) y éstos se actualizarán si están reflejados en la grid.
Debido a la magnitud de este control, los ejemplos se desarrollan todos juntos al final de la sección, aunque cada propiedad o método muestre en una línea como usarlo.
- GridUsuario
- EditarPorObjeto
- EditarPorObjetoyVista
- MuestraCaption
- CaptionBase
- ConcatenaCaption
- Agregar
- Editar
- Eliminar
- CargaObjetos
- Colección
- From
- Alias
- FetchRowStyle
- TablaObjeto
- Where
- OrdenMultiple
- Preparada
- SoloArray
- Refresca
- NoUsarIdDocs
- ColumnaEscalada
- ArrayDB
- ArrayValue (fila,columna)
- SQLSelect
- ActivarScripts
- AgregaColumna
- GetValue
- GridClear
- LimpiaGrid
- Imprimir
- MenuItemAdd
- PasoExcel
- Refrescar
- SetValue
- Eventos
- Campo (NombreCampo)
- Ejemplos completos
GridUsuario
EditarPorObjeto
Descripción: Los datos son editados mediante objetos. La grid instancia el objeto y lo actualiza con los datos insertados y llama al método update del objeto. Con esta opción activada, permite guardar datos configurables del objeto. No se recomienda el uso de esta propiedad cuando la grid deba cargar un número elevado de registros, ya que ralentiza tanto la carga como el refresco de la grid.
Tipo: true/ false.
Código en VB6:
Código en C#:
EditarPorObjetoyVista
Descripción: Si , tanto esta propiedad como la anterior, están a True, la lectura de los campos se hará de la vista que pone en el campo EdicionGrid de la tabla Objetos en el registro de la colección. Si no se ha configurado esta vista se leerá de la tabla o vista que especifique el código (From). No se recomienda el uso de esta propiedad cuando la grid deba cargar un número elevado de registros, ya que ralentiza tanto la carga como el refresco de la grid.
Tipo: true/false.
Código en VB6:
Código en C#:
MuestraCaption
Descripción: Indica si se mostrará o no el caption de la grid
Tipo: true/ false
Código en VB6:
Código en C#:
CaptionBase
Descripción: Es el texto que se mostrará sobre las columnas de la grid. Si no se especifica, mostrará el total de registros. Si, por el contrario, se especifica y la propiedad ConcatenaCaption = true, se concatena al total de registros, por lo que deberemos dejar un espacio en blanco al final de la cadena.
Tipo: Cadena.
Código en VB6:
Código en C#:
ConcatenaCaption
Descripción: Le añade al caption base el número de registros.
Tipo: true / false.
Código en VB6:
Código en C#:
Agregar
Descripción: Indica si la grid permite agregar registros.
Tipo: true / false.
Código en VB6:
Código en C#:
Editar
Descripción: Indica si la grid permite editar registros.
Tipo: true / false.
Código en VB6:
Código en C#:
Eliminar
Descripción: Indica si la grid permite eliminar registros.
Tipo: True / False.
Código en VB6:
Código en C#:
CargaObjetos
Descripción: Si CargaObjetos = True el origen de datos es las colección, si no, los datos se leen del FROM.
Tipo: True / False.
Código en VB6:
Código en C#:
Colección
Descripción: Le pasaremos la colección de objetos como origen de datos. Para esto necesitamos EditarPorObjeto = True.
Tipo: Colección
Código en VB6:
Código en C#:
From
Descripción: Indica la tabla, vista o consulta que se utilizará como origen de datos. Intente siempre utilizar vistas o tablas directamente. Si desea emplear una consulta combinando tablas, debe especificar un Alias. Cuente con que el control hace un "SELECT columnas FROM XXX". Especifique sólo el origen de datos.
Tipo: String.
Código en VB6:
Código en C#:
Alias
Descripción: Si especificamos un FROM de tipo consulta empleando tablas combinadas, ésta propiedad indicará a las columnas del grid el Alias de tabla por defecto.
Tipo: String. Ver ejemplo de grid usando alias.
Código en VB6:
Código en C#:
FetchRowStyle
Descripción: Indica que cuando se refresque la grid, se activará el evento GridFetchRowStyle. Se utiliza generalmente cuando necesitamos pintar las filas del grid de acuerdo a algún valor dado.
Tipo: true/false.
Código en VB6:
Código en C#:
TablaObjeto
Descripción: Especifica la tabla en la que se van a guardar los datos del grid. Un grid puede tener un origen de datos distinto a la tabla donde se almacena. Guardará todos los datos que coincidan con los campos de la grid.
Tipo: String
Código en VB6:
Código en C#:
Where
Descripción: Cláusula WHERE completa para filtrar el origen de datos.
Tipo: String
Código en VB6:
Código en C#:
OrdenMultiple
Descripción: Nombre de las columnas por las que queremos filtrar separadas por ",". Si se quiere en orden descendente añadir "DESC" tras la columna.
Tipo: String
Código en VB6:
Código en C#:
Preparada
Descripción: Devuelve True cuando tiene columnas creadas. Se utiliza para saber si la grid ya ha sido inicializada.
Tipo: Boolean.
Código en VB6:
Código en C#:
SoloArray
Descripción: Si el valor es True especifica que queremos trabajar sin que el grid actualice los datos en la tabla.
Tipo: Boolean.
Código en VB6:
Código en C#:
Refresca
Descripción: Si el valor es True especifica que se refresque el grid cada vez que se inserte, modifique o elimine un registro.
Tipo: Boolean.
Código en VB6:
Código en C#:
NoUsarIdDocs
Descripción: Cuando utilizamos un origen de datos que carece del campo IdDoc pondremos ésta propiedad a True para que no dé error al actualizar, ya que el control necesita de un campo Identidad para realizar las actualizaciones. Use esta propiedad cuando quiera una grid en casos especiales de sólo consulta o sólo array.
Tipo: Boolean.
Código en VB6:
Código en C#:
ColumnaEscalada
Descripción: Establece la columna que debe crecer al maximizar el grid.
Tipo: String.
Código en VB6:
Código en C#:
ArrayDB
Descripción: Array en el que se basa la grid.
Tipo: XArrayDB.
Código en VB6:
Código en C#:
ArrayValue (fila,columna)
Descripción: Devuelve o establece un valor dentro del array del grid, donde la fila es un Long y la columna String. En C# esta propiedad se ha convertido en la propiedad por defecto de ICntGridUsuario lo que nos ha permitido indizarla directamente. En el ejemplo adjunto pueden ver como se usa en este lenguaje.
Tipo: Valor.
Código en VB6:
Código en C#:
SQLSelect
Descripción: Instrucción SQL completa que toma el grid como origen de datos. Es la unión final de todas las instrucciones dadas (Columnas, FROM, WHERE, UNION)
Tipo: String.
Código en VB6:
Código en C#:
ActivarScripts
Descripción: Activa/Desactiva la ejecución de scripts de de la grid. Si no se activa, la programación de pantalla que tienen los eventos de la grid, no se lanzará.
Tipo: True/False (por defecto, False).
Código en VB6:
Código en C#:
AgregaColumna
Descripción: Este método crea las columnas en el grid. Son objetos de tipo CampoGrid y accederemos a las columnas del grid mediante la estructura: [NombreGrid].Campo ("NombreDeCampo").
Parámetros de entrada:
Parámetros obligatorios:
- Campo (String): Especifica el nombre del campo del origen de datos.
- Ancho (LONG): Establece el ancho de la columna (en TWIPS).
- Descripción (String): Especifica el nombre de la cabecera de la columna.
Parámetros Opcionales:
- Locked (Boolean): Indica que el campo se bloquea y no se puede modificar.
- Combo (String): Consulta SQL con los campos que queremos que muestre el combo. El primer campo es el que quedará en la celda al seleccionar el dato de la lista y los restantes los que desplegará el combo. Ejemplo: SELECT IdArticulo Art, IdArticulo, Descrip FROM Articulo
Si queremos que se quede la descripción lo haremos de la siguiente manera: SELECT Descrip Desc, IdArticulo, Descrip FROM Aticulos
La consulta también puede hacer referencia a un campo de la grid. Por ejemplo si en el grid tenemos un campo IdFamilia y queremos que el combo nos muestre solo los artículos de esa familia. Para hacer referencia a un campo de la grid, en la sentencia SELECT lo especificamos con "@nombrecampo". Ejemplo: SELECT IdArticulo Art, IdArticulo, Descrip FROM Articulos WHERE IdFamilia = @IdFamila
- RowRefreshCombo (Boolean): Establece que se refresque el combo al cambiar de celda, siempre y cuando la consulta del combo dependa de otro campo (como en el ejemplo anterior).
- Format (String): Indica el formato de visualización del campo. Ejemplo numérico con tres decimales: "#,##0.000". Ejemplos fecha: "mm/dd/yyyy", "yyyymmdd", etc.
- Total (Boolean): Indica si debe agregar un campo al final con la suma de los campos la columna.
- Valores (String): Sentencia SQL que especifica el valor del combo que queremos que se vea en la celda. Por ejemplo, si quiero seleccionar del combo el IdArticulo y que éste se almacene en tabla, pero mostrar en pantalla (y en la misma celda) la descripción.
El combo quedaría de ésta manera: SELECT IdArticulo Art, IdArticulo, Descrip FROM Articulos
Mientras que el parámetro valores sería: SELECT IdArticulo, Descrip FROM Articulos
Así estaríamos guardando el IdArtículo seleccionado, pero en la celda se visualizaría la descripción.
- EsResourceID (Boolean): Indica que el valor del campo será un Icono. Con lo cual cargará en la celda la imagen correspondiente. Siempre depende de la propiedad valor. Por ejemplo para cargar un Icono, la SELECT debería ser: SELECT Objeto Obj, Objeto, Icono1 FROM Objetos
- ValorFiltro: OBSOLETO. NO USAR
- Obligado (Boolean): Indica que el campo es obligatorio. Si el usuario no lo completa, saldrá un mensaje advirtiendo ésto.
Parámetros de salida: True/False, devuelve True si la columna se ha podido crear.
Código en VB6:
Código en C#:
GetValue
Descripción: Devuelve el valor del campo dado de la fila activa
Parámetros de entrada: Nombre del campo (String)
Parámetros de salida: Valor del campo dado (Variant)
Código en VB6:
Código en C#:
GridClear
Descripción: Borra el contenido de la grid
Parámetros de entrada: si reestablece las columnas, encabezados y otras propiedades en función del datasource actual (Boolean, opcional, por defecto True)
Código en VB6:
Código en C#:
LimpiaGrid
Descripción: Borra el contenido de la grid y elimina las columnas creadas
Parámetros de salida:
Código en VB6:
Código en C#:
Imprimir
Descripción: Imprime la grid
Parámetros de entrada: Título de página(String, opcional), si la grid tiene los parámetros de impresión configurados (Booleano, opcional, por defecto True). Si el segundo parámetro está a True, no hará caso al primero.
Parámetros de salida: True/False, devuelve True si la grid se ha mandado a la impresora correctamente.
Código en VB6:
Código en C#:
MenuItemAdd
Descripción: Inserta un botón en el menú popup de la grid. Es el mismo método de inserción de botones de menú y botonera. Cuando se presiona un botón popup de la grid, se activa el evento MenuClick. Hay que tener en cuenta que al añadir una opción de menú, también hay que implementar la acción de dicho menú.
Parámetros de entrada: : Caption del Botón(String), Id (String), Tipo de botón (String), Padre (Id del menú cuelga el botón, si no se especifica se entiende que es Padre), Nuevo Grupo (línea separadora que separará el botón de los anteriores) (Booleano), ResId (idIcono de la tabla Iconos_Recursos), Before (si queremos colocarlo antes de otro botón especificamos el nombre del botón).
Los tipos de botones son:
- eTipo_Menu_Boton (Botón convencional)
- eTipo_Menu_Check (botón de tipo check)
- eTipo_Menu_Combo (sólo para el control Botonera)
- eTipo_Menu_Edit (Botón con caja de texto para edición)
- eTipo_Menu_Menu (Botón de tipo menú de cabecera)
Parámetros de salida: El objeto AhoraTool creado
Código en VB6:
Código en C#:
PasoExcel
Descripción: Exporta a Excel el contenido de la grid
Parámetros de salida: True/False, devuelve True si la exportación no da ningún error.
Código en VB6:
Código en C#:
Refrescar
Descripción: Refresca la grid.
Código en VB6:
Código en C#:
SetValue
Descripción: Modifica el campo por el valor dado en la fila activa.
Parámetros de entrada: Campo (String), Valor (Variant)
Parámetros de salida: True/False, devuelve True si se ha modificado el valor correctamente
Código en VB6:
Código en C#:
Eventos
La mayoría de los eventos suelen tener un nombre autoexplicativo y, en su mayoría, son los que suelen tener las grids estándar.
MenuClick
Descripción: se dispara cuando hacemos clic en un botón del menú popup del grid
GridLoad
Descripción: se dispara cuando se refresca la grid, es decir, cuando llamamos al método refrescar o cuando actualizamos un registro.
Campo (NombreCampo)
Este objeto es el campo, propiamente dicho, del grid. En este objeto se guardan las propiedades mencionadas en el método AgregaColumna( ) del grid.
Tipo: CampoGrid.
Código en VB6:
Código en C#:
Sustitucion
Descripción: Valor que tomará el campo cuando se actualice una celda de la misma fila.
Tipo: String.
Código en VB6:
Código en C#:
Booleano
Descripción: Dibuja un control CheckBox
Tipo: Boolean.
Código en VB6:
Código en C#:
CampoFecha
Descripción: Establece un control Fecha para el campo.
Tipo: String.
Código en VB6:
Código en C#:
Default
Descripción: Establece un valor por defecto para los registros nuevos.
Tipo: String.
Código en VB6:
Código en C#:
AsignaAsistente
Descripción: Lanza un AhoraProceso llamado AhoraAsistente. Cuando se pulsa F3 despliega un formulario con filtro para buscar el dato. Este procedimiento sólo define el formulario y va acompañado del método AssistAddField ( ), que definirá las columnas de la grid del asistente.
Parámetros de entrada: Número de Icono que queremos que aparezca en el Form (Long), Instrucción SQL, origen de datos (String), Where, filtro SQL, puede ser una cadena vacía (String), Lista de campos a ordenar separados por comas (String),
Nombre del campo grid. Si queremos que aparezca en el campo del asistente (String, opcional), Ancho del formulario (Long, opcional), Alto del formulario (String, opcional)
Puede consultar información detallada sobre este método en el siguiente artículo.
AssistAddField
Descripción: Define los campos de la grid del asistente F3.
Parámetros de entrada: Nombre del campo que queremos que aparezca en el grid (String), Descripción del campo (String, opcional), Tipo de dato (si se mostrará un String, long, etc) (Long, opcional), Tamaño del campo (Long, opcional), Autosize (Boolean, opcional),Indica que es el campo que queremos que nos retorne. Si no se especifica el asistente nos devuelve el primero que declaremos (Boolean, opcional).
Puede consultar información detallada sobre este método en el siguiente artículo.
CampoNuevaFila
Descripción: Indica qué campo tendrá el foco cuando la grid crea una nieva fila. es decir, la primera vez que se carga o cuando se inserta una línea.
Tipo: cadena.
Código en VB6:
Código en C#:
--------------------------------------------------------------------------------------------------------------
Ejemplos completos
Ejemplo CampoGrid
Código en VB6:
Código en C#:
Ejemplo Control Grid
Con este código al hacer doble clic sobre una columna ejecutamos una instrucción SQL.
Podemos ver como se piden parámetros para que introduzca el usuario, como se realizan consultas a la base de datos y como se obtienen los valores de una grid:
Código en VB6:
Código en C#:
Éste es el evento antes de actualizar la columna del grid, advertimos al usuario que la máquina es genérica. Formulario de inicio de un contrato (frmContratos_Inicio)
Código en VB6:
Código en C#:
Este evento se ejecuta antes de cargar la grid. En él modificamos el origen de datos de ésta.
De esta forma, si tenemos configurada la grid con campos configurables los podemos mostrar. Este evento estaba en el formulario de listas de precios de clientes.
Código en VB6:
Código en C#:
Ejemplo Control Grid: Array sin origen de datos y campos sustitución
- Cuando no se desea cargar datos en el grid, simplemente que el usuario los introduzca, no es necesario poner un origen de datos.
- Utilizaremos sustitución cuando se selecciona un artículo y queremos que se actualice el campo Descripción, y viceversa.
- Al insertar un nuevo registro queremos que el campo cantidad por defecto sea 1.
Código en VB6:
Código en C#:
Ejemplo Control Grid: sólo ARRAY usando Alias y campos calculados
En éste ejemplo el grid es de sólo edición y sólo queremos que se refresque cuando se llame al método cargaGridSelecTarifas. Le pondremos un FROM porque queremos que cargue datos por defecto.
Código en VB6:
Código en C#:
Ejemplo Control Grid: grid de sólo lectura con Alias y filtro WHERE
Código en VB6:
Código en C#:
Ejemplo Control Grid: grid con colecciones y asistentes F3
Cuando la grid tiene la propiedad CargaObjeto=False, cuando actualizamos un registro significa que NO estamos actualizando el objeto. La grid no podrá contener los campos de la tabla configurables del objeto.
Código en VB6:
Código en C#:
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo