Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con DbGrid. (https://www.clubdelphi.com/foros/showthread.php?t=46723)

redimido 07-08-2007 15:36:06

Problema con DbGrid.
 
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

Código Delphi [-]
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

Asunto
 
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.

Código Delphi [-]
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:


Código Delphi [-]
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 :
Código Delphi [-]
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í :
Código Delphi [-]
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;
Código Delphi [-]
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 [-]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

Asunto
 
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


La franja horaria es GMT +2. Ahora son las 12:53:21.

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