如何对表格中的数据修改后着色标记处理

我是社区第67823位番薯,欢迎点我头像关注我哦~
昨天有朋友FR报表交流群中,咨询如何对报表数据的修改数据进行着色标记处理?
现将有关方案在此贴中进行讨论:

1.png
如图所示,地区列中数据有变更,即对背景色进行了着色标记。
下面谈谈思路
参与人数 +1 F豆 +2000 +60 F币 +30 理由
传说哥 + 2000 + 60 + 30 赞一个!

查看全部评分

发表于 2016-5-26 17:03:34
思路是这样:
       对库中的数据表(表A)同步建立一个同结构的表(表B),新增一个时间字段(tim),B表的主键除与A表同之外,另外再加时间字段,一起为主键(KEY)
表A建一个触发器,当对表A中数据进行新增修改的时候,把数据同步到B表。
ALTER TRIGGER t_pm_gundongzhicheng_Trigger1
ON dbo.t_pm_gundongzhicheng
FOR INSERT, UPDATE
AS
insert t_pm_gundongzhicheng_h  select * from  inserted

这样B表就有了各时间修改的数据
当然也可以进一步优化,主键相同的,只保留最多两个记录。这里是把每次修改都进行了数据同步。
这样便有了数据基础。
用前端的数据来历史库中查询,如主键相同,记录数大于2的即返回一个1,表示该数据有变动。
这个查询我们用存储过程来实现.
存储过程如下:
ALTER    proc dbo.tm_check(@dkh varchar(50),@Pro varchar(50),@zb varchar(50),@byid varchar(50),@zdm varchar(50),@dqz varchar(100),@lx int=1)
--过程变量说明
--这位朋友用4个字段做为记录唯一性的标记,因此前4个变量用于在历史B表中定位查找同一记录,4个值从FR中传入如A5[$$$],E5[$$$]这样
--第5个变量,是要对比的字段名,第6个变量是取FR的当前值$$$,
--第6个变更,主要用于区别比较的值是数据还是字符串。这个默认为1即字符串比较
--下面是具体的过程,查4个主键值相等,而对比字段不等的记录,如果存在,则返回记录数。
as
set nocount on
declare @str varchar(2000),@str1 varchar(100)
--declare @dkh varchar(50),
--declare @pro varchar(50),@zb varchar(50),@byid varchar(50),@zdm varchar(50),@dqz varchar(100),@lx int
--select @dkh='ppp',@pro='pro',@zb='zb',@byid='byid',@zdm='dakehu',@dqz='',@lx=0
if @lx=1
select @str1='isnull('+@zdm+','''')<>'''+isnull(@dqz,'')+''''
if @lx=0
begin
if isnull(@dqz,'')=''
select @dqz=null
select @str1='isnull('+@zdm+',0)<>'+isnull(@dqz,'0')+''
end
select @str='select count(1) from t_pm_gundongzhicheng_h
where isnull(dakehu,'''')='''+isnull(@dkh,'')+'''
and   isnull(projectname,'''')='''+isnull(@pro,'')+'''
and   isnull(zhibiao,'''')='''+isnull(@zb,'')+'''
and   isnull(beiyongid,'''')='''+isnull(@byid,'')+'''
and   '+@str1
--insert into tm_ls(zf) select @str
--select isnull(@dkh,'')+isnull(@pro,'')+isnull(@zb,'')+isnull(@byid,'')+isnull(@zdm,'')+isnull(@dqz,'')
exec(@str)
--select 1
发表于 2016-5-26 17:09:13
1.png
发表于 2016-5-26 17:11:55
如此,即解决了数据变动着色的问题。当然这个着色,由于只要设置了SQL函数的单元格,即发生与数据库的交互,效率略受影响,在数据量不是特别大的情况下,还是可以授受的。

经测试,基本达到要求。当然还有进一步优化的空间。
比如主键太复杂,设了4个字段。因此建议这位朋友需要优化数据库表的设置。

欢迎朋友们指正。
发表于 2016-5-31 10:01:48
太强了,论坛里的高手就是多啊,
发表于 2016-6-6 16:58:33
y太强了,论坛里的高手就是多啊,
发表于 2016-6-6 19:08:51
单元格设置控件,控件的编辑结束事件:var location = this.options.location;
var cr = FR.cellStr2ColumnRow(location);
var col = cr.col;
var ro = cr.row;
$("tr[tridx=" ro "]").find("td[col=" col "]").css("background-color","rgb(153,204,0)");
即可
发表于 2017-9-14 10:13:05
clover 发表于 2016-6-6 19:08
单元格设置控件,控件的编辑结束事件:var location = this.options.location;
var cr = FR.cellStr2Colum ...

这个会报错的。
发表于 2022-8-24 16:32:08
66666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

11回帖数 1关注人数 9350浏览人数
最后回复于:2023-5-29 08:58

返回顶部 返回列表