Delphi 如何更改tcxgrid行的颜色

Delphi 如何更改tcxgrid行的颜色,delphi,delphi-7,Delphi,Delphi 7,我想用不同的颜色显示tcxgrid中的一些行(取决于列值) 我为它做了一些更改,但在运行我的项目后,它并没有反映在网格上 procedure TfrmMessaging.cxGrid1DBTableView1CustomDrawCell(..); Var i : Integer; begin For i := 0 To cxGrid1DBTableView1.ViewData.RowCount - 1 Do Begin If cxGrid1DBTableView1.ViewD

我想用不同的颜色显示tcxgrid中的一些行(取决于列值)

我为它做了一些更改,但在运行我的项目后,它并没有反映在网格上

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;
在上面的代码中,我使用了tcxgrid的cxGrid1DBTableView1CustomDrawCell事件。
提前感谢。

如果您使用的是
数据感知视图
(看起来),则需要使用
数据控制器
而不是
视图数据
来访问记录

TcxGridDBTableView
的DevExpress帮助中所述(粗体格式是我的):

TcxGridDBTableView对象表示网格表视图的数据感知版本。它继承其祖先的所有功能,,但数据绑定设置除外。TcxGridDBTableView的DataController.DataSource属性提供视图与TDataSet或其子体之间的连接

除此之外,
OnCustomDrawCell
事件为每个单元格激发,因此您不需要迭代行

以下代码应该可以帮助您:

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;

如何更改网格的颜色

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;

结束

通常最简单的方法就是cxStyles。在表单上删除样式存储库,向其中添加一个或多个样式,并在对象检查器或事件处理程序(OnGetContentStyle等)中分配它们


与自定义绘图相比,自定义绘图的一个优点是,在进行各种计算时会考虑样式,而所有者绘制的单元格没有经过特殊处理,有时无法正确自动调整大小等。

在专用于其组件的DevExpress论坛中,您找不到这一问题的答案?我将您的问题复制并粘贴到了Google和第一个建议是对你的问题的可能答案。请在你的研究上多加一点努力。我们愿意提供帮助,但在您寻求答案的过程中也包括搜索引擎。@SilentD,FWIW:;-)@乌利格哈特-谢谢。:-)款式非常适合这个。您可以灵活地在行或单个单元格上使用它们。样式在这里没有用处,因为您可以为除聚焦行以外的任何内容提供样式。这是一个好主意,但是当不是所有的可能性都包含在样式中时,您必须再次退回到在自定义绘制事件中进行编码。谢天谢地,不客气!如果你觉得这是你的答案,请考虑接受这个答案。另一方面,我也建议你考虑UliGerhardt的解决方案。虽然两种解决方案都有效,但他的方案比我的灵活。