起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 271|回复: 10

【结贴】如何判断数据是否和原数据集数据相同**

[复制链接]
发表于 2008-6-27 14:50:07 | 显示全部楼层 |阅读模式
想实现功能,一个单元格中数据在修改后,改变其底色。
采用一下代码。
问题是现在凡有数据的单元格底色都变了。如图所示,是进界面没有任何操作时候的显示,我想实现刚进入都正常底色,只有修改为不同与原数据时单元格底色方可改变。
烦知情者解决方案或告知思路。

{未提交到数据库前,当单元格数据改变时,高亮凸显其底色}
procedure TFKBD.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
   field:TDataField;
begin
     field:=TDataGridColumn(AColumn).ColumnDef.Field;
     (TDataGridColumn(AColumn).FieldName);
     if (field.OldValue<>field.NewValue) then
      AColor:=$FFFF08;
end;

info.png

30.09 KB, 下载次数: 165

回复

使用道具 举报

 楼主| 发表于 2008-6-27 14:51:58 | 显示全部楼层
{未提交到数据库前,当单元格数据改变时,高亮凸显其底色}
procedure TFKBD.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
   field:TDataField;
begin
     field:=TDataGridColumn(AColumn).ColumnDef.Field;
     if (field.OldValue<>field.NewValue) then
      AColor:=$FFFF08;
end;
回复 支持 反对

使用道具 举报

发表于 2008-6-27 15:02:22 | 显示全部楼层
你要加条件的,比如现在改的那个列,那就去控制这个列的颜色,而不是所有的列。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 15:11:52 | 显示全部楼层
我所有的列修改后都需要变色的,不控制所有列如何去做?
回复 支持 反对

使用道具 举报

发表于 2008-6-27 15:35:39 | 显示全部楼层
这个就比较麻烦了,不建议直接通过平台来做,自己找一下第三方控件来实现。
回复 支持 反对

使用道具 举报

发表于 2008-6-27 15:42:49 | 显示全部楼层
平台里来做的话,首先datagrid有两种模式:loadallrecords和非loadallrecords
对于loadallrecords来说,首先要判断某条记录是否被修改(这个alang在培训的时候跟你们说过,UpdateStatus 属性),然后产生Delta,然后去判断值是否被更改。。。。等等
对于非loadallrecords来说,首先要做的是要去定位到某条记录,然后后边是一样的。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 15:54:03 | 显示全部楼层
啊啊啊啊
这么复杂啊

那我胡乱写的代码里的 OldValue 和NewValue是什么东东  
   什么操作也没进行 为什么会不一样呢
回复 支持 反对

使用道具 举报

发表于 2008-6-27 18:21:06 | 显示全部楼层
对,没有好的方法了。
OldValue 加载数据后的值,NewValue修改后的值。在数据修改提交后,OldValue就会是NewValue的值了。
对于楼主的需求没有好的方法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-27 19:49:55 | 显示全部楼层
OldValue 加载数据后的值,NewValue修改后的值。在数据修改提交后,OldValue就会是NewValue的值了。


可是俺没有修改啊,它进来就是抓图那种界面啊
回复 支持 反对

使用道具 举报

发表于 2008-6-29 17:08:50 | 显示全部楼层
那是因为你的表达式有问题,这么用看看。
if Field.OldValue <> nil then
    if not Field.OldValue.Equals(Field.NewValue) then
      AColor:=$FFFF08;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 19:56 , Processed in 0.044340 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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