PDA

Ver la Versión Completa : DBGrid de color según campo lógico (u otro valor)


Neftali [Germán.Estévez]
30-06-2006, 16:16:05
Método 1
Cómo modificar los colores en un Grid según el valor de un campo booleano

En el evento GetCellParams pones...


procedure TnombreFrom.Panel1GetCellParams(Sender: TObject;
Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);

var
Resultado: Boolean;

begin
Resultado := (Sender as TDBGrid).DataSource.DataSet.FieldByName('Campo').AsBoolean;
if not Resultado then Background := clYellow;
if not resultado then AFont.Color := clRed;
if Highlight then AFont.Color := clHighlightText;
end;


Método 2
Cómo cambiar el color de una línea del DBGrid, según el contenido de un campo

En este caso se toma el contenido del primer campo, el cual es lógico. Pero puede ser sustituido por cualquier otro valor. Hasta aquí, similar al anterior.

Primero es necesario declarar un tipo nuevo: TCustomDBGrid


type TCrakerDB = class(TCustomDBGrid);


Y luego, hay que asignar el evento OnDrawColumnCell


procedure TForm.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
try
with TCrakerDB(sender) do begin
if DataLink.Fields[0].Value then
if DataLink.ActiveRecord = row - 1 then
Canvas.Brush.Color := clBlack
else
Canvas.Brush.Color := $00FFFFC4;
end;
DBParrilla.DefaultDrawColumnCell(Rect, DataCol, Column, State);
except
end;
end;


Se produce un efecto no deseable: no hay datos que mostrar y sin embargo, la parrilla contiene datos falsos.

Dicho con otras palabras: Al añadir el bloque except evitamos el error que se produce cuándo no hay datos.
No sirve un bloque finally.

Con este código dibujarás la línea que tiene el cursor de color clBlack, y las que cumplan la condición que especifiques con el color $00FFFFC4. El resto de líneas tendrán el color que el DBGrid tenga definido por defecto.