Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=23693)

dmagui 25-07-2005 21:25:22

DBGrid
 
Buenas Tardes:

Mi pregunta es la siguiente ¿existe algena manera que un DBGrid en un campo como por ejemplo que diga proveedor cuando me pare alli me despliege los nombres existentes que hay en la base de datos de proveedores y pueda seleccionar uno?

si la hay como se podria hace.
Gracias Por la ayuda:eek:

hector.roma 26-07-2005 00:21:24

Yo creo que no
 
Es decir, con un TDBGrid normal no conozco la forma de hacerlo, puedes buscar por los foros hilos en los que se habla de componentes avanzados que hagan eso que tu quieres...si no tambien los tienes por internet.

En cualquier caso, donde está tu espíritu aventurero... hazlo tú. No quedará muy profesional, es decir, va a quedar una chapuza pero mira el lado positivo, vas a aprender un monton.

Una posible idea:
  • No muestres los datos directamente de la tabla pásalos a una tabla intermedia donde puedas jugar con ellos sin miedos...
Así cuando te pares en el registro que tu quieras, mediante los eventos vas a saberlo, podrás lanzar un evento que te modifique la tabla intermedia, colocando como nuevos registros entre el que tu quieres modificar y el siguiente, tantas filas como valores posibles... y cuando hagas clic sobre una de esas filas te quedas con el nombre asociado, se lo metes al campo que te interesa, eliminas las filas esas y refrescas el grid. Antes dije chapuza o fricada???

Ejemplo:
Código SQL [-]
Codigo Nombre Tipo
------ ------ ----
1      Luis   Cliente
2      Pepe   Proveedor
3      Julio
4      Carlos Proveedor 
y asi cuando hagas click sobre el "Tipo" de (3, Julio), la tabla te quedará:
Código SQL [-]
Codigo Nombre Tipo
------ ------ ----
1      Luis   Cliente
2      Pepe   Proveedor
3      Julio
              Cliente
              Proveedor
              Empleado
              Otros
4      Carlos Proveedor 
y al hacer click sobre una linea que no tiene un codigo asociado recoges el valor lo cargas en tu tabla REAL y vueves a crear la tabla intermedia.

Venga a programar... y a pasarlo bien.

PD: Cuando no duermo me vuelvo algo friki

vtdeleon 26-07-2005 01:26:57

Saludos

Si mal no recuerdo, las columnas de un DBGrid tiene una propiedad llamada PickList, en la qe puede (en modo dise~o o Ejecucion) aderir datos y estos seran desplegados (en modo de ejecucion) en la celda como un ComboBox.
Puedes intentar hacer un bucle que recorrar la tabla de proveedor* e ir agregando al PickList de la columnas que decidas

Suerte
(*)Una vez no tuve que hacer eso y se agregaron los datos solo, pero estas tablas estaban relacionadas Maestro-Detalles

hector.roma 26-07-2005 01:38:14

Disculpas
 
Cita:

El desconocimiento de una ley no exime de su cumplimiento.
Aquí pasa lo mismo, que yo no conozca algo, no implica que no exista o que no se pueda hacer. Antes de convertir mis palabras en dogma de fé, seguir buscando un poco más, por lo menos hasta tener una segunda opinión...

Desde estás líneas pido disculpas a quien haya podido desmoralizar... :D

Un saludo, y para otra vez antes de contestar instalaré delphi y haré alguna comprobación en vez de hacerlo de memoria...

afxe 26-07-2005 14:38:53

Te sirve un lookup field ???
 
Hola.No sé si es lo que estás buscando, pero prueba a crear un campo del tipo lookup en el editor de campos persistentes del dataset asociado al DBGrid. En el momento en que metas ese campo como una columna del Grid y entres en modo edición se creará automáticamente un dblookupcombobox.

Saludos.

marcoszorrilla 26-07-2005 14:48:04

Otra solución puede ser incrustar un DbLookUpCombobox en la Rejilla y si te parece dificil esta opción, a parte de las mentadas por mis compañeros de Foro, puedes hacer que al hacer doble clic sobre una linea de la rejilla se abra un formulario de diálogo con los proveedores (modal) para que se ejija uno.

Un Saludo.

dmagui 26-07-2005 15:02:02

Cita:

Empezado por vtdeleon
Saludos

Puedes intentar hacer un bucle que recorrar la tabla de proveedor* e ir agregando al PickList de la columnas que decidas

Como se puede hacer esto?? tienes por hay si no es mucha molestia un hilo en donde yo me pueda guiar para hacer mi bucle??

dmagui 26-07-2005 15:04:09

Cita:

incrustar un DbLookUpCombobox en la Rejilla
Y como se puede hacer esto??? cuando se este dibujando la rejilla dibujar en esa columna un dblookup o como??? :D

Besos chupos y abrazos para todos gracias por la ayuda

vtdeleon 26-07-2005 15:15:14

Saludos

De memoria:
Código Delphi [-]
procedure Cualquiera;
begin
  With TbProveedor do begin
    Open;
//  First;
    While not Eof do begin
      DbGrid.Column[0].PickList.Append(FieldByName('campo').AsString;
      Next;
    End;
  End;
end;
:D Aunque creo que lo dicho por
Cita:

Empezado por vtdeleon
*)Una vez no tuve que hacer eso y se agregaron los datos solo, pero estas tablas estaban relacionadas Maestro-Detalles

Puedes hacerlo con
Cita:

Empezado por afxe
prueba a crear un campo del tipo lookup en el editor de campos persistentes del dataset asociado al DBGrid. En el momento en que metas ese campo como una columna del Grid y entres en modo edición se creará automáticamente un dblookupcombobox.

Suerte

dmagui 26-07-2005 15:57:28

Hola gracias con respecto a este codigo:

Código:

procedure Cualquiera;
  begin
          With TbProveedor do begin
                Open;// First;
                  While not Eof do
                          begin
                                DbGrid.Column[0].PickList.Append(FieldByNam('campo').AsString;
                        Next;
                End;
        End;
end;

Código:

With TbProveedor do begin
En esta parte va el nombre de la tabla cierto??pero el problema es que aqui me dice que no esta definido Proveedor que es mi tablahay que agregarle algo?? gracias por su ayuda

el_barto 26-07-2005 17:18:22

No mira hazlo asi en tu procedure:

Código Delphi [-]
 
 With IBTable1 do begin
    Open;
//  First;
    While not Eof do begin
        DbGrid1.Columns[0].PickList.Add(IBTable1.FieldByName('campo').Asstring); 
      Next;
    End;
  End;

lo que si no tengo NPI es de como hacerlo segun como indica macoszorrila, es decir agregando un dblookupcombobox y te agradeceria marcos si puedes abrir nuestras mentes con esta interesante solucion

dmagui 26-07-2005 17:44:02

hayyyy gracias pero hay un problema con esta solucion y es que hay que hacer como 4 click para que despliegue la lista esto se puede corregir????

vtdeleon 26-07-2005 18:23:35

Saludos
Cita:

Empezado por el_barto
lo que si no tengo NPI es de como hacerlo segun como indica macoszorrila, es decir agregando un dblookupcombobox y te agradeceria marcos si puedes abrir nuestras mentes con esta interesante solucion

Chequea este hilo, no es con un DBLookUpCombobox pero es con un Check, y creo que tiene la misma "ciencia":P
http://www.clubdelphi.com/foros/show...bgrid+checkbox
http://www.clubdelphi.com/foros/show...bgrid+checkbox
http://www.clubdelphi.com/foros/show...bgrid+checkbox

el_barto 26-07-2005 18:51:23

pero como dice marcos es que hacer esto para el caso con el que estoy haciendo pruebas:

tabla1 es de PERMISOS con campos cod_per, user_name, prodcre
tabla2 es de USUARIOS con campos cod_user, user_name, user_pass

lo que quiero es escoger el user_name mediante una lista desplegable cuando este en el la tabla PERMISOS

cuando hago dobleclick en el IBTable1 me despliega un editor hago click derecho y escojo add fields despues hago click derecho y escojo newfield

Despues de esto me muestra un cuadro de dialogo y me aparecen los siguientes campos:

Nombre : coloco un nombre cualquiera
Component : se coloca solito
Type: le coloco string de 20
FieldType: Escoji el Lookup
KeyField: puse la llave primaria de la tabla1
Resultfield: el campo que deseo mostrar en el combo
lookup keys: llave primaria de la tabla2

eso es lo que entendi, pero me saca un error que dice:
DataField not permitted on open Dataset

y hay si no tengo ni idea como corregirlo.

el_barto 26-07-2005 19:12:00

Cita:

Empezado por dmagui
hayyyy gracias pero hay un problema con esta solucion y es que hay que hacer como 4 click para que despliegue la lista esto se puede corregir????

Hola de nuevo pequeña dmagui

mira si te sirve te lo puedo reducir de 4 a 2 click solo tienes que poner en true la propiedad del dbgrid dgalwayshoweditor, me gustaria decirte como hacer para que de una vez te apareciera la lista deplegable y lo unico que tuvieras que hacer es seleccionar pero me queda dificil por que no se :o y a decir verdad creo que es imposible


La franja horaria es GMT +2. Ahora son las 06:27:34.

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