---------------單格顏色
procedure TForm1.dxDBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
begin
if (AColumn=dxDBGrid1Column2) and (ADOQuery1.FieldByName('XBC').Value='0') then begin
AColor:=clRed; //背景 AFont.Color:=clBlack; //字體
end;
if (AColumn=dxDBGrid1Column2) and (ADOQuery1.FieldByName('XBC').Value>'12') then begin
AColor:=clGreen; AFont.Color:=clBlue;
end;
if (AColumn=dxDBGrid1Column2) and (ADOQuery1.FieldByName('XBC').Value>'20') then begin
AColor:=clBackground; AFont.Color:=clCaptionText;
end;
-----------列顏色
如果dxDBGrid不分組:
procedure TForm1.dxDBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean; var AText: string;var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;var ADone: Boolean);
begin
if ANode.Values[i] = 1 then
begin
AColor := clRed;
end;
end;
i為你的type字段在dxDBGrid中的位置,第一列為0,依此類推
/---------------------
如果dxDBGrid採用了分組,那麼以上方法就不行了,會出錯。因為這時候不管你ANode.Values[i]中i為什麼值,結果總是分組那一列的值。不知有沒有高手解決了這個問題。我採用了一個笨辦法實現了顏色的變化,雖然笨,但效果還湊合。
在變色條件列上寫該列的一個事件:
procedure TForm1.dxDBGrid1typeCustomDrawCell(Sender: TObject;ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;var AText: String; var AColor: TColor; AFont: TFont;var AAlignment: TAlignment; var ADone: Boolean);
begin
if ANode.Values[i] = 1 then
begin
AColor := clRed;
end;
end;
這樣,type這一列的顏色就達到要求了;
接下來,把所有列的CustomDrawCell事件都關聯到dxDBGrid1typeCustomDrawCell事件,OK!
第二種情況,把事件寫在列事件CustomDraw裡面也可以
//第二種方式
procedure Tfrm_yljg_cx.dxGridCustomDrawCell(Sender: TObject;ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;var AText: string; var AColor: TColor; AFont: TFont;var AAlignment: TAlignment; var ADone: Boolean);
begin
inherited;
if ANode.Strings[dg.ColumnByName('dgColumn13').Index] = '0' then
AColor:=clFuchsia;
end;