CxGrid 改變某行或單元格的顏色
一個表(T)的結構結構如下.
ID Test
1 2001
2 1444
3 1788
5 2645
6 4568
cxGrid成功連線到該表, 如果要實現單元格特效, 就要在cxGridDBTableView的 OnCustomDrawCell
寫程式碼. 該事件宣告原形為
type
TcxGridTableDataCellCustomDrawEvent = procedure(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean) of object;
引數 Sender: 你要實現特效的TableView; ACanvas: 畫布, 這個引數比較重要, 就是用這個引數畫出
特效; AViewInfo: 自定義條件的來源; 從這個引數中獲取單元格值; ADone: 設為真就不會Paint.
下面是以 Test欄位的值來控制元件單元格顏色
var
CheckValue: integer;
cxColumn: TcxGridColumn;
begin
cxColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Test');
if cxColumn = nil then
Exit;
//這個條件用來限制是否只Paint指定的單元格, 去掉則Paint整行.
if SameText(AViewInfo.Item.Name, cxColumn.Name) then begin
CheckValue := AViewInfo.GridRecord.Values[gdtvTestTest.Index]; //獲取單元格
//以下是滿足條件的字型變色
if CheckValue >= 4000 then //大於4000為紅色
ACanvas.Font.Color := clRed
else if CheckValue >= 3000 then //大於3000綠色
ACanvas.Font.Color := clGreen
else if CheckValue >= 2000 then //大於2000藍色
ACanvas.Font.Color := clBlue;
//以下是滿足條件的資料背景變色
{if CheckValue >= 4000 then begin //大於4000為紅色
AViewInfo.Focused;
ACanvas.Brush.Color := clRed
end
else if CheckValue >= 3000 then //大於3000綠色
ACanvas.Brush.Color := clGreen
else if CheckValue >= 2000 then //大於2000藍色
ACanvas.Brush.Color := clBlue; }
end;
end;