如何更改tcxgrid行的颜色

Amr*_*uta 2 delphi delphi-7

我想以不同的颜色显示来自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;
Run Code Online (Sandbox Code Playgroud)

在上面的代码中我使用了tcxgrid的cxGrid1DBTableView1CustomDrawCell事件.提前致谢.

Gui*_*ens 6

如果您正在使用 a data-aware view(看起来),您需要使用 theDataController而不是 theViewData来获取记录。

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

TcxGridDBTableView 对象表示网格表视图的数据感知版本。它继承了其祖先的所有功能,但数据绑定设置除外。TcxGridDBTableView 的 DataController.DataSource 属性提供了 View 和 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;
Run Code Online (Sandbox Code Playgroud)


Uli*_*rdt 5

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

相对于自定义绘图的一个优点是,样式被考虑用于各种计算,而所有者绘制的单元格不是专门处理的,有时不能正确自动化等.