起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1120|回复: 22

【搞定】DataGridCustomDrawCell事件**

[复制链接]
发表于 2007-9-17 10:55:29 | 显示全部楼层 |阅读模式
if not (ASelected or AFocused) then // 如果是当前行,则默认系统的反白显示
  begin
    if ANode.HasChildren then
    begin
      AColor := $0E0FFFF;  // 分组颜色
      exit;
    end;

    if (ANode.Index mod 2) = 1 then
      AColor := $EAEAEA;  // 奇数行颜色
  end;
  if TDataGridColumn(AColumn).FieldName = 'F_PLANDATE' then
  begin
    if DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
      FieldByName('F_PLANDATE').AsDateTime) <= 0 then
      AFont.Color := Business.System.Graphics.clRed;
    if (DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
      FieldByName('F_PLANDATE').AsDateTime) < 5) and
      (DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
      FieldByName('F_PLANDATE').AsDateTime) > 0) then
      AFont.Color := Business.System.Graphics.clYellow;
   end;


分组后有问题, 分组后点中变色的列,所有列都会变了


分组前的图片

无标题1.jpg

149.69 KB, 下载次数: 482

回复

使用道具 举报

 楼主| 发表于 2007-9-17 10:56:12 | 显示全部楼层
分组后的图片

无标题2.jpg

180.48 KB, 下载次数: 476

回复 支持 反对

使用道具 举报

发表于 2007-9-17 11:20:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-17 14:32:37 | 显示全部楼层
var
  I: Integer;
begin
  if (ANode.Index mod 2) = 1 then
    AColor := $EAEAEA;  // 奇数行颜色

  if ANode.HasChildren then // 如果是当前行,则默认系统的反白显示
  begin
    if (ASelected or AFocused) then
    begin
      //AColor := $0E0FFFF;  // 分组颜色
      for I := 0 to DataGrid.ColumnCount - 1 do
      begin
  //循环取列找到相应的项(由于列允许移动位置和分组,所以不能固定),并判断其值
      if (DataGrid.Columns[I].FieldName = 'F_PLANDATE') then
      begin
        if DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
        FieldByName('F_PLANDATE').AsDateTime) <= 0 then
        AFont.Color := Business.System.Graphics.clRed;
        if (DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
        FieldByName('F_PLANDATE').AsDateTime) < 5) and
        (DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
        FieldByName('F_PLANDATE').AsDateTime) > 0) then
        AFont.Color := Business.System.Graphics.clYellow;
      end;
        exit;
      end;
    end;
  end;

  if not (ASelected or AFocused) then // 如果是当前行,则默认系统的反白显示
  begin

  if TDataGridColumn(AColumn).FieldName = 'F_PLANDATE' then
  begin
    if DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
      FieldByName('F_PLANDATE').AsDateTime) <= 0 then
      AFont.Color := Business.System.Graphics.clRed;
    if (DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
      FieldByName('F_PLANDATE').AsDateTime) < 5) and
      (DaysBetween(SysService.Time,TDataGridColumn(AColumn).ColumnDef.Field.DataSet.
      FieldByName('F_PLANDATE').AsDateTime) > 0) then
      AFont.Color := Business.System.Graphics.clYellow;
   end;
end;

没有效果,还是有问题,请问我哪里写的有毛病
回复 支持 反对

使用道具 举报

发表于 2007-9-17 15:02:05 | 显示全部楼层
楼主,看我3楼给你的连接了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-17 15:08:38 | 显示全部楼层
恩,就是模仿3楼的改的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-17 15:18:30 | 显示全部楼层
效果还是1,2楼的图那样, 1楼1条红色的日期列,  在分组后选中该条红色列,所有的都红了,怎么解决?
回复 支持 反对

使用道具 举报

发表于 2007-9-17 16:19:07 | 显示全部楼层
哦,你设置断点跟踪了吗?是否按你的意愿在执行呢?看代码好像看不出啥问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-17 16:50:58 | 显示全部楼层
if (ASelected or AFocused) then   3楼的意思 我理解是点中的数据才会变色,我的需求是没点中的就要变色,但分组是不乱就可以(分组可以不变色)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-17 17:29:17 | 显示全部楼层
现在有没有能判断是否分组了的代码, 如果分组了,什么也不做(不变色了)  , 有明白人解释下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-28 04:46 , Processed in 0.042028 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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