起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 563|回复: 7

【搞定】DataGrid 中OptionsDB | edgoloadallrecords属性设置后,ONCustomDrawCell事

[复制链接]
发表于 2007-1-18 12:10:06 | 显示全部楼层 |阅读模式
DataGrid 中OptionsDB | edgoloadallrecords属性设置后(主要是为了预览记录时不让选中的记录乱滚动),但是在ONCustomDrawCell事件中写了一段根据某个字段不同的值显示不同颜色的功能,这个功能竟然不起作用了,所有记录都显示一样的颜色,也就是没有根据不同的字段内容显示不同的颜色,只要去掉edgoloadallrecords属性就好了,但是我还想保留这个属性,请问怎么办?
回复

使用道具 举报

发表于 2007-1-18 15:57:25 | 显示全部楼层
edgoloadallrecords属性你先不选,然后在DataGrid中分组看看ONCustomDrawCell事件是否起作用?
edgoloadallrecords和分组的机制是一样的。

如果还不可以,你把你的代码发上来,我这里回复测试看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:26:53 | 显示全部楼层
分组后也是出现那种情况,ONCustomDrawCell事件没有正常执行,如果不分组就正常。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:28:58 | 显示全部楼层
代码如下。

procedure TSJWG1.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);
var
  lContextCurrent: Business.Model.TContextCurrent;
  sname : string;
  allckr : string;
begin
lContextCurrent := Business.Model.TContextCurrent.Create(Self.Context);
sname := lContextCurrent.Operator.ID;
allckr := DataSetBroker1.DataSet.FieldByName('CKR').AsString;
if stringutils.Pos(sname,allckr) > 0 then
begin
    AFont.Color := Business.System.Graphics.clBlack;
    ACanvas.Font.Style := ACanvas.Font.Style - [TFontStyle.fsBold];
end
else
begin
    ACanvas.Font.Style := ACanvas.Font.Style + [TFontStyle.fsBold];
end;
end;
回复 支持 反对

使用道具 举报

发表于 2007-1-18 16:34:40 | 显示全部楼层
这个因该是可以同时使用的。
比如:任务中心中,未处理的任务是粗体,其余的是正常字体,分组后仍然正常。

你可以选中OptionsDB | edgoloadallrecords属性然后,在ONCustomDrawCell事件设置断点,调试看看是否执行了,还是说代码逻辑上有问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 16:58:01 | 显示全部楼层
那上边这段代码逻辑上有问题吗?请指出来。我就是在ONCustomDrawCell事件只写了这一段没有其它代码,然后设置edgoloadallrecords属性,就出现这个问题。
请帮助测一下原因。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 18:30:10 | 显示全部楼层
问题解决。因为edgoloadallrecords属性设置后,DataSetBroker1.DataSet.FieldByName('CKR').AsString这句代码定位在记录上不变化。采用了以下方法解决。
for I := 0 to DataGrid.ColumnCount - 1 do
begin
      if DataGrid.Columns[I].FieldName = 'CKR'  then
      begin
          allckr := SysUtils.trim(ANode.Strings[I]);
          if stringutils.Pos(sname,allckr) > 0  then
           begin
              AFont.Color := Business.System.Graphics.clBlack;
              ACanvas.Font.Style := ACanvas.Font.Style - [TFontStyle.fsBold];
           end
           else
           begin
              ACanvas.Font.Style := ACanvas.Font.Style + [TFontStyle.fsBold];
           end;
      end;
end;
回复 支持 反对

使用道具 举报

发表于 2007-1-19 09:09:16 | 显示全部楼层
:)
OK,谢谢楼主共享资源。
结贴。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

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

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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