Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Hacer que una columna de un DbGrid aparezca distinta según valor (https://www.clubdelphi.com/foros/showthread.php?t=2390)

Aprendiendo 22-07-2003 03:47:11

Hacer que una columna de un DbGrid aparezca distinta según valor
 
Hola a tod@s.

Necesito que en un DbGrid, si una columna de ese DbGrid, contiene el valor 0.00, entonces que no aparezca este valor sólo que se quede en blanco esa columna, no muestre nada.

Coloco el DefualtDrawing a False, e intento manejar el evento OnDrawColumCell consigo algunas cosas pero no lo que me propongo.

Desde ya muchas gracias, y feliz verano. Que calor esta haciendo este año.

:) :cool: :)

Ruben_Cu 22-07-2003 06:18:15

Hola Aprendiendo, aquí tambien hace un fuerte calor. Aunque no veo del todo clara tu pregunta te paso un ejemplo que puede ser que te ayude, supon que tenemos un dbgrid con un campo en la columna nº 10 que se llama 'surtida' y es booleano, yo quiero que aquellos valores del campo que sean verdaderos se pinten de aqua y solo se lean los que son falsos, entonces hago lo siguiente:
Código:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
                with Sender as TDBGrid do begin
                if (datacol=10) and table1.FieldByName('surtida').AsBoolean then
                BEGIN
                Canvas.Brush.Color := clAqua;
                Canvas.FillRect(rect);
                end else defaultdrawing:= true;
                end;
end;

En tu caso sería adecuarlo a la condición de que el valor del campo sea igual a 0.00.
Espero te ayude el ejemplo y vete a la costa para que refresques del calor.
Saludos

Caminante 19-10-2011 00:07:44

Código Delphi [-]
 
procedure TForm1.UnCampoGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  if sender.AsCurrency=0.0 then
    text:=''
  else
    text:=sender.AsString;
end;

En el evento gettext del campo puedes decidir que valor mostrar.

Saludos

usuario1000 20-11-2018 20:39:57

Mi problema es que no sé en que posición estará la columna, sólo sé el nombre de la columna, pero no su posición. Y esa posicion en el dbgrid puede variar a gusto del usuario.



¿como averigo esa posición en ese momento?


Saludos.

Casimiro Notevi 20-11-2018 21:36:26

Con la propuesta anterior es indiferente la posición.
Código Delphi [-]
procedure TForm1.UnCampoGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  if sender.AsCurrency=0.0 then
    text:=''
  else
    text:=sender.AsString;
end;

usuario1000 21-11-2018 19:28:32

Muchas gracias Casimiro Notevi, al final lo he solucionado de esta forma:


Código Delphi [-]
procedure TFPrograma.DBGrid1DrawColumnCell(Sender: TObject;
  const [Ref] Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
            if (column.Field.FieldName = 'datoCampo')then
                 begin
                    dbgrid1.Canvas.Font.Color := clblack;
                    dbgrid1.Canvas.Brush.Color := clWebGreenYellow;
                    dbgrid1.DefaultDrawColumnCell(rect,datacol, column, State);
                 end;
end;


De esta forma esté donde esté la columna lo hace perfecto.


Gracias.

usuario1000 21-11-2018 19:32:33

Por cierto se me olvidaba, una cuestión más, en el DbGrid anterior lo que hago es colorear una celda, pero en vez de eso, podría poner en la celda un Gráfico sencillo, como un semaforo o un circulo rojo, verde, amarillo, el color que sea. Es decir dependiendo del dato que lea de la tabla, indico un gráfico en dicha celda. Algo parecido al punto verde que aparece en este foro al lado del nombre del usuario.


Gracias.....

Casimiro Notevi 21-11-2018 19:40:53

También vale.

ecfisa 21-11-2018 19:41:53

Hola.

Algunos ejemplos:
Saludos :)

usuario1000 21-11-2018 19:49:30

Cita:

Empezado por ecfisa (Mensaje 529645)




Muchas Gracias ecfisa. Muy util la información.

ElDioni 22-11-2018 15:27:37

Hola, si lo que quieres es poner solo un semáforo píntalo igual que lo estabas haciendo, con el canvas.brush y el font.color, cambiándolo a cllime y clred, según lo que necesites.
Así no tienes que cargar una imagen e irá más rápido.



Saludos.

usuario1000 30-11-2018 14:47:20

Cita:

Empezado por ElDioni (Mensaje 529655)
Hola, si lo que quieres es poner solo un semáforo píntalo igual que lo estabas haciendo, con el canvas.brush y el font.color, cambiándolo a cllime y clred, según lo que necesites.
Así no tienes que cargar una imagen e irá más rápido.



Saludos.


Gracias por la aportación.


La franja horaria es GMT +2. Ahora son las 00:20:25.

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