Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   distintas picklists en la misma columna de dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=11837)

arc22 27-06-2004 05:30:50

distintas picklists en la misma columna de dbgrid
 
Hola todos mi consulta es la siguiente:

Tengo un dbgrid conectado a una tabla y quiero que en la misma columna de ese dbgrid aparezcan distintas listas desplegables para cada registro (según campos de otra tabla).
Hasta ahora estoy usando esto:

procedure TForm3.Table1NewRecord(DataSet: TDataSet);
var
i:Integer;
lista: TStrings;
begin
lista:= TStringList.Create;
for i:=1 to table2stock.asinteger do
lista.Add (IntToStr (i));
DBGrid1.Columns[0].PickList:= lista; {1}
lista.Destroy;
end;

Pero lo que hace esto es cargar la misma lista para todos los registros.
Obviamente el problema está en {1} debo poder separar la fila seleccionada para cargar la picklist, pero hasta ahora no encuentro el método adecuado.
También probé ponerlo en el evento oncellclick del dbgrid pero parece no funcionar.
Si alguien puede darme una ayudita desde ya se lo voy a agradecer.
Saludos.

jachguate 27-06-2004 17:58:47

Dado que picklist es un atributo de la columna, el dbgrid no puede mantener un picklist diferente para cada registro (fila).

Sin embargo, podes cambiarlo dinámicamente cada vez que cambia una fila (evento onScroll del DataSet), además de lo que ya estas haciendo para cuando se inserta un nuevo registro.

Hasta luego.

;)

arc22 28-06-2004 05:41:41

list out of bound
 
Hola, antes que nada gracias por contestar, te comento que hice algunas modificaciones:

procedure TForm3.Dbgrid1onDblclick(Sender: TObject);
var
i:Integer;
lista: TStrings;
valo:integer;
catselgrid: string;
artselgrid: string;
begin
with DBGrid1.DataSource.DataSet do
begin
lista:= TStringList.Create;
catselgrid:= DBGrid1.SelectedRows.Items[1];
artselgrid:= DBGrid1.SelectedRows.Items[2];
if (Table2.FindKey([catselgrid, artselgrid])) then
begin
valo:= Table2Stock.AsInteger;
for i:=1 to valo do
lista.Add (IntToStr (i));
DBGrid1.Columns[0].PickList:= lista;
lista.Destroy;
end;
end;
end;

pero salta un Error: list index out of bounds.
Hay un limite en la cantidad de compoonentes de la lista ? :confused:
siendo que el valor de valo (tope del for que genera la lista) puede llegar a mas de 1.000.
Saludos.

jachguate 28-06-2004 08:37:47

Hola.

Te recomiendo aprender a usar las etiquetas [ code ], [ delphi ], [ sql ] y [ php ] para publicar trozos de código, según corresponda. De esta manera respetan su indentación e incluso se resalta la sintaxis, con lo que son mucho mas legibles.

Sería útil saber en que línea del código salta la excepción, pues a simple vista no encuentro el error.

Por otro lado, me parece exagerado hacer un picklist con tantas opciones. De hecho, mas de unas cuantas ya no me parece práctico para un picklist... sobre todo si se trata de números. Mejor dejar que el usuario introduzca manualmente el dato, no te parece?

Hasta luego.

;)

DarkByte 28-06-2004 16:10:30

Yo te recomiendo, aparte del consejo de jachguate, que identes un poco más tu código, pues aún con esas etiquetas, sin el identado se hace muy pesado el leerlo.


La franja horaria es GMT +2. Ahora son las 07:27:30.

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