PDA

Ver la Versión Completa : Problema campo Lookup


VRO
26-09-2005, 10:08:06
Hola, foreros del club Delphi, vereis estoy utilizando un DBGrid editable con un campo LookUp.

El DBGrid tiene por campos:
FECHA, ARTICULO,DESCRIPCION, CANTIDAD, PRECIO, TIPOIVA
que toma de uan tabla dataset lfact que corresponde a una tabla lfactura, que corresponde a las líneas de una factura.

En dicho dbgrid podemos intriducir manualmente datos ó artículos correspondientes a una tabla artículo ó que no corresponden a ninguna tabla.

Aquí viene cuando interviene el campo lookup, que se refiere al campo DESCRIPCION del DBGrid y se conecta con el campo descripcion de la tabla artículo. He conseguido que se despliegue el combo con la descripcion de los artículos, de la siguiente manera:



Esta funcionalidad ya viene por defecto en el DBGrid. Lo que tienes que hacer es:

1. Agregar los campos de la tabla en el editor de campos del dataset (doble click sobre la componente)

2. Agregar (con el mismo editor) un nuevo campo. Ajusta las propiedades de este nuevo campo así:

Name - el que quieras, p. ej. "Descripcion"
Type - String
Size - La longitud máxima de la descripción
FieldType - Lookup
DataSet - el dataset que apunte a la tabla de artículos -> (articulo)
ResultField - el campo de la tabla de artículos que quieras mostrar (supongo que será 'descripcion') -> descripcion
Lookup Keys - campo código del artículo ->cod_art
Key Fields - campo en la tabla de facturas que apunte a la tabla de artículos.
-> cod_art

Con esto, al momento de entrar a la columna "Descripción" del DBGrid, podrás desplegar el combo. Cualquier actualización que hagas del combo se verá automáticamente reflejada.




Tal y como indica Roman en un hilo.


pero lo que me falta es que una vez seleccionada una descripcion de la tabla artículo, es que rellene en los campos del dbgrid lo siguiente:

en articulo -> que rellene el codigo de artículo de la tabla artículo.
en precio -> el precio del artículo de la tabla artículo.
en tipoiva-> el iva del artículo de la tabla artículo.

y se situe en la casilla cantidad del dbgrid.

Espero su ayuda y le doy las gracias de antemano

defcon1_es
26-09-2005, 13:53:26
Hola.
El "relleno" de los datos del Grid puedes programarlo en el evento OnCloseUp del Combo.

Puedes definir un procedimiento que te devuelva esos datos (mediante una consulta) y asignarselos al DataSet asociado al grid.

VRO
26-09-2005, 16:31:21
Gracias por tu ayuda, lo que obtienes con el campo LookUp es un combo en un DbGrid pero no tiene evento OnCloseUp. Igual estoy equivocada, si es así corrijeme, porque por lo menos yo no le veo por ningún lado.


De todas formas muchas gracias, compañero.

defcon1_es
26-09-2005, 17:22:26
Hola, tienes razón, el TDBGrid no permite "enlazar" controles externos a las celdas...
pensé que habías enlazado un TDBComboBox a la celda del grid...

Investigando un poco en la VCL,
he visto que si añades los campos del dataset en el grid como COLUMNS,
(haciendo doble click en esa propiedad y pulsando botón derecho del ratón, selecciona "All Fields")
y al campo lookup le pones en su propiedad ButtonStyle = esEllipsis,
el evento del grid OnEditButtonClick si funciona.

En este evento es donde puedes programar la carga de los datos.

Esto es porque el DBGrid crea un DBGridInplaceEdit para los campos lookup que tenga enlazados.

Extraído de la VCL :
TDBGridInplaceEdit adds support for a button on the in-place editor,
which can be used to drop down a table-based lookup list, a stringlist-based
pick list, or (if button style is esEllipsis) fire the grid event
OnEditButtonClick.

Salu2.

VRO
26-09-2005, 18:15:14
Mil gracias lo pruebo y te cuento.

VRO
27-09-2005, 09:24:34
Perfecto eso es justo lo que necesitaba.

Graciassssssssssssssssss.