PDA

Ver la Versión Completa : ¿ DBGrid.PickList := Lista Desplegable con valores de una tabla?


Peterman
07-06-2006, 11:01:39
Tengo un problemilla con DBGrid y su propiedad PickList: no se como puedo
hacer surgir una lista desplegable con valores de un registro(columna) de una tabla dentro de los campos de un DBGrid.

Lo que quiero conseguir con esto es evitar violaciones de claves externas (foreign key) ni q se pueda introducir valores q no sean con el tipo apropiado para esa columna.

¿Que hago con la propiedad PickList?

Para acceso a datos utilizo una bd InterBase, Querry y DataSource.

Gracias x su atencion...:cool:

luisgutierrezb
07-06-2006, 18:49:10
el picklist es como un combobox normal donde tu le introduces las opciones, en tu caso especifico, seria mejor crear un campo calculado de tipo "lookup" asi cuando lo veas en el grid, te apareceran como opciones los campos de otra tabla (como un dblookupcombobox)

Peterman
08-06-2006, 12:00:05
Gracias Luis x contestar:

Ya habia escuchado algo del dblookupcombobox, pero he intentado utilizarlo y no me salen los valores del DataSource asociado a este (el que yo le pongo)...la teoria es muy bonita pero la practica un poco mas compleja.

Me podrias explicar un poco mejor: sobre todo esto: si yo creo el dblookupcombobox y la lista de valores desplegados fuera la correcta; como hago para asociarlo con el Grid; ¿lo pongo encima de la casilla donde quiero q se me habra dentro del Grid? (Esta solucion casi seguro que no va a ser).

Estoy a punto de conseguirlo y todo es x vuestra ayuda, gracias; y contestarme x favor!!!

Paoti
08-06-2006, 19:55:29
Ya había sido contestado esto por jhonny....




a grandes rasgos es muy fácil



mira.


tenemos tabla amigos (, , , , ,campo Id_ciudad), y tablas ciudaddes (ID_ciudad, descripcion)



en tu dataset, click boton derecho, fileds editor, en la ventanita que se abre (agrega los campos ---- add alll fields), enseguida.

click boton derecho, add field, escribe el nombre del campo, "
Descripcion_Ciudad" y le dices que es de tipo lookup...


el key field, es el campo principal (Amigos), dataset es la otra tabla donde quieres llenar el combo, lookup key es la clave que se va a guardar en key field y result field es el campo que se mostrara en el combo. o algo así.



perdona la ayuda tan escueta, estoy algo apurado.

http://www.clubdelphi.com/foros/showthread.php?t=29292&highlight=campos+lookup


hilos encontrados a lo que preguntas

http://www.clubdelphi.com/foros/search.php?searchid=468452


Saludos desde Guadalajara



Editado: Bienvenido al Foro de club Delphi. aquí aprendemos todos.


P.S. La Busqueda en los foros te la reomiendo.... es un arsenal de conociemitnos sin limite.

Peterman
09-06-2006, 10:20:17
Gracias Paoti !!! Tu explicacion no ha sido muy detallada pero mas q suficiente para salir de apuro.

Aunque yo lo he conseguido de otra forma mas rebuscada, menos clara:

listaDatos: TStringList;
cadena: String;

//Queremos ver si nos muestra todos los valores del campo CODESTUDIO.
1. cadena := BDMod.QEstudiosCombo.FieldList.CommaText; // cadena:=CODESTUDIO.
2. BDMod.QEstudiosCombo.First; //Nos situamos al principio del Query.
3. listaDatos:=TStringList.Create; //Creo un objeto vacio TStringList

4. for i:=1 to BDMod.QEstudiosCombo.RecordCount do
begin
5. listaDatos.Add(BDMod.QEstudiosCombo.FieldByName(cadena).AsString);
6. BDMod.QEstudiosCombo.Next;//Avanzamos al siguiente registro.
end;

7. DBGrid1.Columns[2].PickList:= listaDatos; //Aqui añadimos los datos al PickList.


-->QEstudiosCombo = Es el Querry asociado a la tabla de la que queremos obtener los valores.
-->CODESTUDIO = Es el nombre de la columna de la que queremos obtener los valores.

Lo que se trata es de ir leyendo la tabla regitro a registro e ir añadiendo dichos campos en un objeto vacio de tipo TStringList (que realmente no se ni para que son este tipo de objeto). Bueno, una vez que añadmos creado el listado de valores, se lo asignamos en el campo PickList de la columna que queramos del Querry.

Si alguien tiene alguna pregunta que me dejen un mensaje, gracias....

Paoti
09-06-2006, 16:42:20
Prueba con los campos lokup amigo....



y en vez de eso codigo si solo queires mostrar los datos, haz lo mism que te explique en el hilo pero ahora con campos calculados, es más elegante...