Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2007
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
Question Agregar columnas al DBGrid en Runtime

Hola a todos

Una vez mas solicitando su ayuda.

Necesito agregar columnas a un DBGrid en Runtime.

Los datos de los campos que agregaré al DBGrid los tengo en una tabla (nombre del campo, el tipo, mascara de edicion, etc., asi como tambien la tabla a la que pertenecen).

Lo que pretendo es que si deseo agregar o quitar una columna del DBGrid, nomas lo elimino o agrego de la tabla y asi no necesitaré recompilar para que los cambios se relejen, sino simplemente cerrar y abrir la aplicacion.

gracias y saludos

VB
Responder Con Cita
  #2  
Antiguo 10-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Quizás haya una forma más fácil.

En una tabla de configuración, guardas el select que ha de hacerse:

Código:
Tabla: Config

Seccion              Valor
sqlClientes           select idcliente, nombreCliente, direccion from clientes
sqlfacturas          select * from facturas
Ahora en Delphi, al mostrar el dbgrid de clientes haces así:
Código Delphi [-]

query1.sql.text := LeerConfig('sqlClientes');
query1.Open;
Obviamente la función LeerConfig hace un locate del parámetro que recibe, y devuelve la columna "Valor" donde tendrás el sql que necesitas.

Esto tiene algunos detalles a tener en cuenta:
- En el Grid, no añadas las columnas en tiempo de diseño, ya que cada vez que abras la consulta, se reinician dependiendo de los campos que se vayan a leer.
- Quizás necesites alguna rutina para establecer el ancho de cada columna, ya que por defecto el grid asignará el DisplayWith de cada campo al tamaño máximo de ese campo, por ejemplo, si el campo NombreCliente tiene un ancho máximo de 100 caracteres, esa columna se verá muy muy ancha.

Incluso puedes guardar en esa tabla config, sólo los campos que el usuario quiere ver:
Código Delphi [-]
query1.sql.text := ' select '+LeerConfig('sqlClientes') + ' FROM BLAH BLAH';
query1.Open;
En la columna valor, solo se habrá guardado: "Nombrecliente, direccion, Telefono"


Normalmente, y como otra posibilidad más, puedes dar una opción al usuario para que pueda ocultar las columnas que él quiera, guardando esa lista de campos, después puedes recorrer el DBGrid y ocultarla, lo explico mejor:
Código Delphi [-]
// el usuario quiere ver los siguientes campos:
VerCampos := ' Nombrecliente, Direccion, telefono';

//ocultamos las columnas del grid que no estan en esa lista:
with DBgrid1 do
for i:=0 to Columns.count -1 do
  Visible := pos(Columns[i].FieldName, VerCampos) <> 0;

// para guardar las columnas para una próxima vez:
with DBgrid1.columns do
for i:=0 to count -1 do
  VerCampos := VerCampos + ', '+ Columns[i].FieldName;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 10-01-2007 a las 21:11:13.
Responder Con Cita
  #3  
Antiguo 11-01-2007
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
Thumbs up

Lepe gracias por la pronta respuesta

intentaré con ese ejemplo

saludos



Cita:
Empezado por Lepe
Quizás haya una forma más fácil.

En una tabla de configuración, guardas el select que ha de hacerse:

Código:
Tabla: Config
 
Seccion              Valor
sqlClientes           select idcliente, nombreCliente, direccion from clientes
sqlfacturas          select * from facturas
Ahora en Delphi, al mostrar el dbgrid de clientes haces así:

Código Delphi [-]

query1.sql.text := LeerConfig('sqlClientes');
query1.Open;




Obviamente la función LeerConfig hace un locate del parámetro que recibe, y devuelve la columna "Valor" donde tendrás el sql que necesitas.

Esto tiene algunos detalles a tener en cuenta:
- En el Grid, no añadas las columnas en tiempo de diseño, ya que cada vez que abras la consulta, se reinician dependiendo de los campos que se vayan a leer.
- Quizás necesites alguna rutina para establecer el ancho de cada columna, ya que por defecto el grid asignará el DisplayWith de cada campo al tamaño máximo de ese campo, por ejemplo, si el campo NombreCliente tiene un ancho máximo de 100 caracteres, esa columna se verá muy muy ancha.

Incluso puedes guardar en esa tabla config, sólo los campos que el usuario quiere ver:

Código Delphi [-]
query1.sql.text := ' select '+LeerConfig('sqlClientes') + ' FROM BLAH BLAH';
query1.Open;



En la columna valor, solo se habrá guardado: "Nombrecliente, direccion, Telefono"


Normalmente, y como otra posibilidad más, puedes dar una opción al usuario para que pueda ocultar las columnas que él quiera, guardando esa lista de campos, después puedes recorrer el DBGrid y ocultarla, lo explico mejor:

Código Delphi [-]
// el usuario quiere ver los siguientes campos:
VerCampos := ' Nombrecliente, Direccion, telefono';

//ocultamos las columnas del grid que no estan en esa lista:
with DBgrid1 do
for i:=0 to Columns.count -1 do
Visible := pos(Columns[i].FieldName, VerCampos) <> 0;

// para guardar las columnas para una próxima vez:
with DBgrid1.columns do
for i:=0 to count -1 do
VerCampos := VerCampos + ', '+ Columns[i].FieldName;





Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Agregar Nombre a las columnas de Un DBgrid en Timpo de Ejecucion mgaray Varios 5 22-06-2018 03:19:41
Agregar elementos a un DBcomboBox (runtime) vinicc Conexión con bases de datos 2 26-08-2006 01:28:31
Mover y agregar controles en RunTime JXJ Varios 2 05-05-2005 02:16:04
Crear las columnas en Runtime (QReport) sitrico Impresión 14 15-01-2004 12:34:47
Agregar un campo a una tabla paradox (runtime) sitrico Conexión con bases de datos 3 17-07-2003 00:14:11


La franja horaria es GMT +2. Ahora son las 06:08:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi