PDA

Ver la Versión Completa : Poner una columna de un DBGrid como columna Fija


rgstuamigo
03-03-2009, 21:45:41
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
Bueno..:rolleyes:, intentando y intentando creo que lo he solucionado con el siguiente codigo:
Al crear el formulario....
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)
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.SelectedIndex=0 then
DBGrid1.SelectedIndex:=1;
end;


Despues de poner al ClientDataSet1 en estado de Insersion
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..