惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
量子位
S
SegmentFault 最新的问题
V
Visual Studio Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
D
Docker
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
V
V2EX

博客园 - 冯东

Oracle问题诊断过程常用SQL Cognos10 RedHat5.4 X64 安装记录 从命令行启动Cognos的方法 如何让列表实现任意字段类型的排序 如何使导出的excel和报表分页设置不一样 基于Oracle触发器的报表版本保存工具 Cognos重建CSK JS屏蔽Cognos报表右键菜单 - 冯东 - 博客园 利用JS重写Cognos右键菜单 Cognos亲和力解释 Java中Split函数的问题 - 冯东 - 博客园 修改Oracle数据库的字符集 Oracle锁定选出的结果集 面试题 北漂,真的来了 通过修改Linux服务自动启动指定应用程序 Oracle自动启动(解决了Failed to auto-start Oracle Net Listene和Message 1053 not found错误) 由于系统时间修改导致Oracle启动失败 - 冯东 - 博客园 Oracle中删除包含物化视图的表空间的方法
不用JavaScript实现列表排序(利用钻取实现)
冯东 · 2010-11-08 · via 博客园 - 冯东

实现演示的视频已经发到论坛中http://www.cognoschina.net/club/thread-10286-1-1.html

第一次参加报表比赛时用JavaScript实现列表数值字段的排序,虽然这个很实用,但是JavaScript对不同内核的浏览器支持程度不一样,而且一般做报表的开发人员可能对JavaScript都不是很熟悉,所以虽然我认为我写的已经很详细了,但是还是有好多网友在使用的过程中遇到很多问题,问我应该怎么调试JavaScript,然而JavaScript却不是三言两语能偶说清楚的。后来我突然想到是不是可以利用追溯来实现排序呢?我试了一下午,终于有所成。后来我就因为其他事耽搁了个把月,今天利用周末整理一下。发给大伙

排序实现的思路这里就不提了,可以参考我前两天发的博文

用基于自身的追溯来实现排序,即:报表的钻取对象还是它自己,在钻取过程中将参数改变,实现排序。

以前两天发的任意字段列表排序例。打开排序的列表如下图所示

 

为了能够在追溯中改变参数,所以必须多创建几个数据项,我们先需要的数据项有5个,升序、降序(UP、DOWN)以及三个需要排序的列(A、B、C)。如下图所示:

 

数据项表达式就是参数所要接收的值。如图所示UP数据项的表示为’UP’。

接下来为列头增加排序显示的图片,先点击解锁,并将图像组件放到“年份”列头中,如下图所示:

 

点击图片,在属性栏中的来源类型改为“报表表达式”,并将表达式的内容设置为

IF ( ParamValue('sorttype') = 'UP' )

THEN

    ('http://127.0.0.1:9300/p2pd/pat/images/sortState_ascending.gif' )

ELSE

    ('http://127.0.0.1:9300/p2pd/pat/images/sortState_descending.gif' )

该表达式根据传递的参数动态显示图片。

接下来为年份创建追溯定义,为了便于理解,我们将名称定义为UP,将目标报表选中自身

 

点击编辑设置传递的参数

 

将方法选择为“传递数据项值”,并未参数设置相应的值,点击确定

我们在复制一下年份,并该其追溯名称为DOWN,将sorttype传递的数据项值改为DOWN

 

这时运行报表,看到年份列有两个年份,点击前一个会按照年份进行升序排列,点后面一个会按照降序排列。

为了避免这种现象,我们需要用条件样式来控制显示。

切到条件资源管理器中,新建一个布尔值变量IsUP,表达式设置为

ParamValue('sorttype') = 'UP'

将两个年份的样式变量都设置为IsUP,并将前一个年份为“是”时不显示(方框类型设置为空),后一个年份为“否”时不显示。

再次运行报表就只有一个年份,点击就会进行排序,并且图片提示当前是升序还是降序

 

再次进入条件资源管理器,创建一个字符串变量sortColumn,表达式为:

ParamValue('sortcolumn')

并设置3个值A、B、C

 

选中图片,并将sortColumn设为样式变量,根据参数的值判断图片是否显示。以年份为例,随对应的参数值为A,所以需要经B、C、其他所对应的方框类型设置为空。

此时一个字段的排序就已经完成了,我们将这三个对象复制一下啊,分别粘贴到后面几列中,然后分别设置追溯传递的值和相应的样式就可以了。

最终效果如下图所示