Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   un listBox en un DBGrid? (https://www.clubdelphi.com/foros/showthread.php?t=67431)

sidneyb 16-04-2010 17:11:09

un listBox en un DBGrid?
 
Buen dia amigos del foro, tengo una duda, espero puedan ayudarme a aclarar...

puedo crear un ListBox dentro de un Grid? es decir, tengo un grid cargado de datos de personas, como sexo, edad, fecha de nacimiento, estado civil, etc. los datos los ingreso por medio de un conjunto de componentes que hay en el formulario, y al querer modificarlos debo usar esos mismos componentes, ahora, quisiera simplificar las cosas para el usuario y permitirle trabajar directamente sobre el grid, por ejemplo, en el campo EstadoCivil tengo cuatro posibles datos, Casado, Soltero, Divorciado, Viudo. Estas posibilidades quisiera mostrarlas en el mismo grid por medio de un ListBox en el mismo sitio de la misma celda, es posible hacerlo? como puedo lograrlo?

Gracias por su colaboracion.

rgstuamigo 16-04-2010 21:54:54

Cita:

Empezado por sidneyb (Mensaje 360778)
Buen dia amigos del foro, tengo una duda, espero puedan ayudarme a aclarar...

puedo crear un ListBox dentro de un Grid? es decir, tengo un grid cargado de datos de personas, como sexo, edad, fecha de nacimiento, estado civil, etc. los datos los ingreso por medio de un conjunto de componentes que hay en el formulario, y al querer modificarlos debo usar esos mismos componentes, ahora, quisiera simplificar las cosas para el usuario y permitirle trabajar directamente sobre el grid, por ejemplo, en el campo EstadoCivil tengo cuatro posibles datos, Casado, Soltero, Divorciado, Viudo. Estas posibilidades quisiera mostrarlas en el mismo grid por medio de un ListBox en el mismo sitio de la misma celda, es posible hacerlo? como puedo lograrlo?

Gracias por su colaboracion.

Bueno primero que nada yo creo mas bien te conviene que no sea un ListBox sino mas bien un Combobox ;)
Hace algun tiempo yo implemente un componente llamado ComboStringGrid que tiene precisamente ese comportamiento que estas deseando, el de permitir elegir al usuario una de muchas opciones .;) Logicamente éste componente utiliza internamente un Combobox para mostrar al usuario opciones para selecionar o elegir en una o varias columnas predeterminadas.
Cabe mencionar que ultimamente le he añadido algunas cositas más,como ser algunas propiedades, si mal no recuerdo en alguna oportunidad lo subi al FTP del club, pero como algunas veces hemos tenidos problemas con el servidor lo cual implica que se haya perdido, por lo cual lo he subido hoy nuevamente, lo puedes encontrar aqui es el archivo zip de nombre "ComboStringGrid-ver 1.1.zip";).Para saber como instalarlo y manejarlo debes leer el archivo txt que trae dentro ademas tiene un Demo.;).
De todas manera si por si acaso no te guste mi componente por ser muy chapuza:D:D, en la web existen muchos otros componentes muy bueno como por ejemplo el "xStringGrid" que está en ésta espectacular página de componentes. El xStringGrid trabaja no solo con combobox sino con algunos otros controles. revisalo.;)
Saludos...:)

rgstuamigo 16-04-2010 22:27:44

Disculpenme
 
No se que me pasó pero tal parece que te entendí que estabas trabajando con StringGrid, pero tal parece que no es así:o:o sino mas bien estas trabajando con DBGrid:eek:, lo cual implica que mi anterior post sólo es válido para componentes StringGrid.
Bueno... como estás trabajando con DBGrid pues en ese caso no necesitas tener o instalarte algun otro componente, ya que el DBGrid ya tiene implementado lo que necesitas.;)
Para hacer que en una determinada columna te aparesca un combobox de opciones para que el usuario selecione una y automáticamente se cargue en la celda determinada pues debes poner dichas opciones en la columna específica del DBGrid de ésta manera:
Código Delphi [-]
DBGrid1.Columns[0].PickList.Clear;//reseteo el PickList (Lista de opciones)
DBGrid1.Columns[0].PickList.Add('Casado');//añado casado en la primer columna
DBGrid1.Columns[0].PickList.Add('Soltero');//añado soltero en la primer columna
DBGrid1.Columns[0].PickList.Add('Divorciado');//añado divorciado en la primer columna
DBGrid1.Columns[0].PickList.Add('Viudo');//añado viudo en la primer columna
Eso lo puedes poner en algun evento que tú lo veas conveniente puedes ser en el AfterOpen, etc. de tu Dataset ó al momento de permitir editar o insertar registros.;)
Cabe destacar que para que se pueda visualizar el combobox es necesario que el usuario tenga el foco el la columna específica y presione la tecla Enter (Intro).;).
Espero que ahora sí, te haya podido ayudar.;)
Saludos...:)

fjcg02 16-04-2010 22:31:54

Para hacer lo que quieres, selecciona en la columna del dbgrid la propiedad PICKLIST.
En ella puedes indicar los valores que quieres que se puedan elegir. Puedes obligar al usuario a elegir entre los valores exclusivamente, o que pueda introducir cualquier valor pero ofreciéndole varios, ...

Personalmente, yo lo que hago es en una tabla de parámetros almacenar estas listas y al crear el formulario, cargarlas sobre la propiedad picklist. De esta manera, si cambiara la lista de opciones, sólo tienes que añadir la opción en la tabla y no será necesario recompilar la apliación.

Un saludo

movorack 16-04-2010 23:39:04



En el caso de la imágen, a los clientes les molesta mucho estar aprendiendose los codigos... y un listbox con el nombre del estado mas que el código mismo es una cuena opción...

Para esto he usado la TJvDBUltimGrid de la JediVCL.. esta grid tiene una propiedad llamada EditControls... donde te permite seleccionar DBControls y asignarlos a las columnas para que entiempo de ejecución se manejen como la imágen.

A la columna le he asignado un TJvDBComboBox que me permite establecer tanto items como valores para esos items.... en los items va el nombre del estado y en valores va el codigo del estado....

igual que fjcg02, estos los lleno con un procedimiento para no andar recompilando cada vez que cambio el nombre de un estado.

Buena caza y buen remar...


La franja horaria es GMT +2. Ahora son las 21:23:08.

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