How to change color of tcxgrid row

梦想的初衷 提交于 2019-12-07 19:44:13

问题


I want to show some rows from tcxgrid in different color (Depend upon column value ).

I did changes for it but its not getting reflected on grid after running my project.

procedure TfrmMessaging.cxGrid1DBTableView1CustomDrawCell(..);
Var
  i : Integer;
begin
  For i := 0 To cxGrid1DBTableView1.ViewData.RowCount - 1 Do
  Begin
    If cxGrid1DBTableView1.ViewData.Rows[i].Values[4] = '1' Then
    Begin
      cxGrid1.Canvas.Brush.Color := clRed;          
    End;
  End;
end;

In above code I have used cxGrid1DBTableView1CustomDrawCell event of tcxgrid. Thanks in advance.


回答1:


Normally the easiest path for stuff like that are cxStyles. Drop a style repository on the form, add one or more styles to it and assign them in the object inspector or in an event handler (OnGetContentStyle etc.).

One advantage over custom drawing is that styles are considered for various calculations while owner drawn cells aren't handled specially and sometimes aren't autosized correctly etc.




回答2:


If you are using a data-aware view (as it seems) you need to use the DataController instead of the ViewData to get to the records.

As stated in DevExpress help for TcxGridDBTableView (bold format is mine):

The TcxGridDBTableView object represents the data-aware version of the grid Table View. It inherits all functionality from its ancestor, except for data binding settings. The DataController.DataSource property of the TcxGridDBTableView provides the connection between the View and a TDataSet or its descendant.

Besides that, the OnCustomDrawCell event fires for every cell, so you do not need to iterate the rows.

Following code should help you:

procedure TfrmMessaging.cxGrid1DBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if Sender.DataController.GetValue(AViewInfo.GridRecord.RecordIndex, 4) = '1' then
    ACanvas.Brush.Color := clRed;
end;



回答3:


How I change the color of the grid

procedure TfrmNewOffer.GrdOffDetailViewRemarkCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  backgroundColorCode: Variant;
  textColorCode: Variant;
begin
  inherited;
  if assigned(AViewInfo) and assigned(AViewInfo.GridRecord) then
  begin
    backgroundColorCode := AViewInfo.GridRecord.Values[GrdOffDetailViewBackColorCode.Index];
    textColorCode := AViewInfo.GridRecord.Values[GrdOffDetailViewTextColorCode.Index];

   if not VarIsNull(backgroundColorCode) then
   begin
     ACanvas.Brush.Color := backgroundColorCode;
   end;

   if not VarIsNull(textColorCode) then
   begin
     ACanvas.Font.Color := textColorCode;
   end;
 end;

end;



来源:https://stackoverflow.com/questions/22814307/how-to-change-color-of-tcxgrid-row

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!