PDA

Ver la Versión Completa : Problema con DbGrid.


redimido
07-08-2007, 15:36:06
Hola amigos del club delphi, tengo un problema para colorear la fila de una grilla según el contenido de un campo especifico en la tabla, osea, en la tabla tengo un campo llamado estatus dentro del cual guardo los siguientes registros (Pendiente y Finalizado), lo que he tratado de hacer es que cuando ese campo en la grilla este como “Finalizado” la fila adquiera un color azul y cuando presente “Pendiente” se muestra en color rojo. Traté de realizarlo de las siguientes maneras y no he logrado nada. No quiere funcionar.


if table1estatus := 'finalizado' then
begin

DBGrid1.canvas.brush.color :=clBlue;
end else

DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
End;
End;

La otra forma:


if table1estatus := 'finalizado' then
begin

DBGrid1.canvas.brush.color :=clBlue;
end else

if table1estatus := 'pendiente' then
begin

DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
End;
End;



Esta línea me da error y no me permite ejecutar el programa, solo se ejecuta cuando la comento y una vez ejecutado el código no funciona( DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State), acaso será que no funciona con campos tipos carácter o me falta algo? :confused:


Le agradecería mucho su ayuda, gracias de antemano.

eduarcol
07-08-2007, 15:38:18
y en que evento estas ejecutandolo???

porq no encierras el codigo entre etiquetas delphi para poder leerlo bien

gluglu
07-08-2007, 15:41:43
if table1estatus := 'finalizado' then
DBGrid1.canvas.brush.color :=clBlue
else
DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);


Tenías el DefaultDrawColumnCell dentro del segundo bloque de la condición. Debe ser ejecutado en ambos casos por lo que hay que sacarlo fuera.

redimido
07-08-2007, 16:01:41
Pués lo he hecho y nada.
Me gustaría saber si es que este bloque (DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
no permite la ejecución debido a que estoy trabando con campos tipos String.


TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if table1estatus := 'finalizado' then
begin
DBGrid1.canvas.brush.color :=clBlue;
end else
DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
End;
End;
End;


La otra forma:



TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if table1estatus := 'finalizado' then
begin
DBGrid1.canvas.brush.color :=clBlue;
end else
if table1estatus := 'pendiente' then
begin
DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
End;
End;
End;

gluglu
07-08-2007, 16:28:23
No tiene nada que ver que sea tipo String o cualquier otro tipo.

De nuevo insisto en que tu código tiene que ser de la siguiente manera para que te funciona correctamente :
TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if table1estatus := 'finalizado' then
begin
DBGrid1.canvas.brush.color :=clBlue;
end else
begin
DBGrid1.canvas.brush.color :=clRed;
end;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
End;

Al menos, en el código que expones, sobra un End; y después no sé si tu mismo te aclaras donde debe de ir el begin y el end de cada bloque.

He modificado tu código dejando el begin y end para cada bloque. Pero de hecho dichos begin y end sobran en el caso particular propuesto, por lo que podría quedar así :
TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if table1estatus := 'finalizado' then
DBGrid1.canvas.brush.color :=clBlue
else
DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
End;
tal y como expuse anteriormente.

Además en la línea del DBGrid1.DefaultDrawColumnCell te falta terminarla con ';'.

La otra forma que pones, también le sobra un end;
TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if table1estatus := 'finalizado' then
begin
DBGrid1.canvas.brush.color :=clBlue;
end else
if table1estatus := 'pendiente' then
begin
DBGrid1.canvas.brush.color :=clRed;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
End;
End;
y tampoco está terminada con ';' la fila del DefaultDrawColumnCell.

Fíjate bien en los bloques Begin End. Ahí es donde tienes el error. No en si es de tipo String u otro tipo.

Luis M.
07-08-2007, 17:48:51
Hola.

Cuando compilas, ¿no te da ningún error?.

Más que nada lo digo por esto:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)if table1estatus := 'finalizado' then



Un saludo.

gluglu
07-08-2007, 18:09:34
Anda ! :eek: Vaya, ni siquiera me había fijado en lo que comenta Luis M. que es totalmente cierto.

redimido
08-08-2007, 15:06:26
Muchas gracias amigo Gluglu, bueno en cuanto a lo que comentas amigo Luis del " := " funciona perfecto, ahí no era donde por lo visto estaba el problema sino más bien en la última línea de código y que gracias a la aclaración realizada por el Sr. Gluglu pude resolver.

Gracias a ambos por su valioso tiempo.:p