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;

 

以上內容為轉貼,在使用過程中,發現作者固定了字段Test,而我遇到的問題是:客戶提出對cxGrid中不可編輯的列用特別的顏色標記,這時候,字段就不是固定的,於是對上面的代碼做了改造:

 

procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  cxColumn: TcxGridColumn;
  aFieldName:String;
begin
  aFieldName:=TcxGridItemDBDataBinding(AViewInfo.Item.DataBinding).FieldName;

 //引用 cxGridDBDataDefinitions單元,才支持TcxGridItemDBDataBinding類.這行取出當前列的字段名
  cxColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName(aFieldName);//按字段名取出Column對象
    if not cxColumn.Options.Focusing then//不允許編輯的列標記為特殊顏色.
      ACanvas.Brush.Color:=clRed;
end;

 

上面的代碼,實現當cxGrid中某一列.Options.Focusing:=False時,用紅色顯示.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM