起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 2472|回复: 1

根据字段内容来改变DataGrid中行的颜色

[复制链接]
发表于 2004-8-25 17:07:04 | 显示全部楼层 |阅读模式
可以通过DataGrid的OnCustomDrawCell事件,根据条件改变Acolor参数值实现,代码如下,其中XSSL代表段”销售数量”:

procedure TGJNRGBYS.DataGridCustomDrawCell(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected,
  AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer;
  AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
begin
  { 如果是当前行,使用系统默认的反白显示 }
  if not (ASelected or AFocused) then
  begin
    { 分组颜色,根据ANode的HasChildren属性判断 }
    if ANode.HasChildren then
    begin
      AColor := $0F0A0F0;
      Exit;
    end;
    if (ANode.Index mod 2) = 1 then
    begin
      { 奇数行颜色 }
      AColor := $0F0F0F0;
    end;

//根据 XSSL 的值,决定SL这列的颜色
    if TDataGridColumn(AColumn).FieldName= 'SL' then
    begin
      if TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
        FieldByName('XSSL').AsInteger >= 100 then
      begin
        AFont.Color := Business.System.Graphics.clWhite;
        AColor := $0F0D0F0;
      end else
        AFont.Color := Business.System.Graphics.clGreen;
    end;
  end;
end;
回复

使用道具 举报

 楼主| 发表于 2007-8-6 09:08:20 | 显示全部楼层

代码实现奇偶行不同底色

DataGrid的OnCustomDrawCell事件写以下代码实现奇偶行不同底色:

  if not (ASelected or AFocused) then // 如果是当前行,则默认系统的反白显示
  begin
    if ANode.HasChildren then
    begin
       AColor := $0C9FAFA;  // 分组颜色
     Exit;
    end;
    if (ANode.Index mod 2) = 1 then
    begin
      AColor := $0F0F0F0;  // 奇数行颜色
    end;
  end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 23:00 , Processed in 0.038612 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表