Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Poner una columna de un DBGrid como columna Fija (https://www.clubdelphi.com/foros/showthread.php?t=63809)

rgstuamigo 03-03-2009 21:45:41

Poner una columna de un DBGrid como columna Fija
 
Hola amigo del club ,necesito poner una columna de un DbGrid que esta conectado a un Clientdataset(esta enganchado a un dataset atraves de un datasetProvider) para insertar registros a una tabla DETALLE, en columna fija(FixedCols)asi como se puede hacer con un StringGrid donde podemos poner una o varias columnas como fijas de modo que el usuario nunca puede editar dicha columna, pero necesito hacer lo mismo en un DBGrid de manera que cuando el usuario este insertando un registro en esta columna se genere una secuencia de numero que indique el numero de Item por el que se esta trabajando.
Es decir si el usuario esta insertando un nuevo registro en la tabla detalle,se ponga (genere) el numero de item(Fila)por el que se esta escribiendo, si el usuario continua insertando otro registro, este valor aumente en uno(en la columna fija) y pase el focus a la siguiente columna.
Espero haberme explicado.;).
Les agradesco cualquier ayudita de antemano..
Saludos....:)

rgstuamigo 04-03-2009 19:49:29

Bueno, creo que el DBGrid no tiene la opcion FixedCols pero las columnas (Columns) tienen la propiedad de ReadOnly, puedeque visualmente no se pueda poder una columna como fija pero se podria poner como solo de lectura y quisas tambien cambiarle de color para aparentar un a fila Fija(FixedCols)y que no sea Focusable y asi tambien insertarle el numero(item) que necesito, para que el usuario vea cuantos filas esta insertando.Lo malo es que necesito saber como hacerlo:rolleyes:, necesito sugerencias o alguna otra alternativa.;).
Saludos..:)

rgstuamigo 04-03-2009 21:51:00

Me respondo yo mismo
 
Bueno..:rolleyes:, intentando y intentando creo que lo he solucionado con el siguiente codigo:
Al crear el formulario....
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
item:=1;//varible global
//DBGrid1.Columns[0].ReadOnly:=True;//no me sirvio
DBGrid1.Columns[0].Color:=clBtnFace;
end;

Al entrar en una celda del DBGrid....(Focus)
Código Delphi [-]
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.SelectedIndex=0 then
    DBGrid1.SelectedIndex:=1;
end;

Despues de poner al ClientDataSet1 en estado de Insersion
Código Delphi [-]
procedure TForm1.ClientDataSet1AfterInsert(DataSet: TDataSet);
begin
DataSet.Fields[0].AsInteger:=item;
item:=item+1;
 if DBGrid1.SelectedIndex=0 then
 DBGrid1.SelectedIndex:=1;
end;
Tengan en cuenta que lo que hago es solo una simulacion de que la columna cero(0)del dbGrid es (FixedCols), desde luego seguramente se puede mejorar.;)
Para probarlo presionen la tecla tab en un DBGrid que este enganchado a un ClientDataSet que contenga algunas columnas(Las que ustede quieran con la codicion de que la columna 0 sea de tipo entero y tenga como Nombre "Item").
Espero que alguien le sirva.:)
Saludos....

Chris 04-03-2009 21:52:44

Puedes intendar pintar manualmente el número en la columna.

Siempre he dicho que en esto de la Programación, el arte está en saber cómo hacer un revoltijo de locuras para conseguir lo que quieres. Cómo un gran pintor que hace una gran obra utilizando mezclando un par de colores.

Saludos.

rgstuamigo 04-03-2009 21:54:38

Gracias D&W ....ya lo solucione con el codigo que puse anteriormente.;)
Saludos..


La franja horaria es GMT +2. Ahora son las 00:03:22.

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