冯东的博客

每天学一点,不断进取
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

不用JavaScript实现列表排序(利用钻取实现)

Posted on 2010-11-08 19:10  冯东  阅读(625)  评论(0编辑  收藏  举报

实现演示的视频已经发到论坛中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、其他所对应的方框类型设置为空。

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

最终效果如下图所示