首页 > 解决方案 > 如果列名包含特定文本,如何更改 cxGrid 中所有列的颜色

问题描述

我正在使用 SQL 在 cxGrid2DBTableView 中水平创建日历表,具体取决于用户选择的日期和日期。因为列名总是不同的,如下图所示:

在此处输入图像描述

我想更改非工作日值的颜色,这意味着我必须标记所有包含 %Sub% 或 %Ned% 的列并更改它们的颜色。

这是我知道列名时使用的代码示例:

procedure TForm1.cxGrid1DBTableView1VremeCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
ACanvas.Font.Color := clBlack;
ACanvas.Brush.Color := clMoneyGreen;   
end;

标签: delphidevexpress

解决方案


您可以将 GridView 的OnCustomDrawCell事件处理程序与AViewInfo.Item.Name.

procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if(Pos('Sub', AViewInfo.Item.Name) <> 0) or (Pos('Ned', AViewInfo.Item.Name) <> 0) then
  begin
    ACanvas.Font.Color := clBlack;
    ACanvas.Brush.Color := clMoneyGreen;
  end;
end;

如果您更喜欢使用字幕,可以使用AViewInfo.Item.Caption而不是AViewInfo.Item.Name. 无论如何,我建议您永远不要使用字幕,因为它们可能会在多语言应用程序中发生变化。

如果要绘制列的标题,可以使用 GridView 的OnCustomDrawColumnHeader事件处理程序:

procedure TForm1.cxGrid1DBTableView1CustomDrawColumnHeader(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
begin
  if(Pos('Sub', AViewInfo.Column.Name) <> 0) or (Pos('Ned', AViewInfo.Column.Name) <> 0) then
  begin
    ACanvas.Font.Color := clBlack;
    ACanvas.Brush.Color := clMoneyGreen;
  end;
end;

推荐阅读