以前在VCL模式,使用cxGrid做什么都方便,后面使用FireMonkey的时候发现,有些简单的东西实现起来,还挺麻烦,下面就针对Grid网格的使用做一些笔记
笔记一:给网格Grid根据条件设置背景颜色与字体颜色
实现方式为,在ColumnCell事件中增加如下代码:
procedure TFrmWorkTask.GridBindSourceDB1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var bgBrush: TBrush;
begin
bgBrush:=TBrush.Create(TBrushKind.Solid,TAlphaColors.White);//定义缺省颜色
try
if Column.Index=9 then //针对第9列进行操作
begin
if trim(Value.ToString)='超期' then //判断条件为内容是否为“超期”
begin
//设置背影颜色
bgBrush.Color := TAlphaColors.Yellow; //背景颜色为黄色
Canvas.FillRect(Bounds,0,0,[],1,bgBrush);
//设置字体颜色
Canvas.Fill.Color := TAlphaColors.Black; //字体颜色为黑色
Canvas.FillText(Bounds,Value.AsString,false,1,[],TTextAlign.Leading,TTextAlign.Center);
end
else
begin
bgBrush.Color := TAlphaColors.White;
Canvas.FillRect(Bounds,0,0,[],1,bgBrush);
Canvas.Fill.Color := TAlphaColors.Black;
Canvas.FillText(Bounds,Value.AsString,false,1,[],TTextAlign.Leading,TTextAlign.Center);
end;
end;
finally
bgBrush.free;
end;
end;
实际效果如下图
【笔记二】Grid网格里面的数据格式化
我将格式化数据放在了DrawColumnCell事件中,当然也可以放在其它事件
procedure TFrmSmtOEE.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
const Column: TColumn; const Bounds: TRectF; const Row: Integer;
const Value: TValue; const State: TGridDrawStates);
var
i:Integer;
begin
for i:= 0 to Grid1.ColumnCount - 1 do
begin
if (Grid1.Columns[i] is TCurrencyColumn) or {假如是整型数据 }
(Grid1.Columns[i] is TIntegerColumn) then
begin
TCurrencyColumn(Grid1.Columns[i]).DecimalDigits:= 3; {三位数进行分隔 }
TCurrencyColumn(Grid1.Columns[i]).ShowThousandSeparator := true;
end;
if (Grid1.Columns[i] is TFloatColumn) then {假如是浮点数据 }
begin
TCurrencyColumn(Grid1.Columns[i]).DecimalDigits:= 2; {保留两位小数点 }
TCurrencyColumn(Grid1.Columns[i]).ShowThousandSeparator := true;
end;
end;
end;
显示的数据结果如下图: