webreport

博客园 首页 新随笔 联系 订阅 管理
       近期因为专注于用c# 实现web报表,积累了一些经验和心得,也写过一篇介绍文章,也有网友提出没有说清楚。现觉得想用单篇文章来说明web报表开发难免会大而空,落不到实处。因而便想到每篇文章只关注web报表开发中一方面,由多篇文章而形成一个web报表开发的系列文章,这些web报表开发的系列文章无先后次序,主从之分。每篇文章只是以一种视角来看待web报表开发而已。大家可以只选自己感兴趣的部分来看,这样也能节约大家的时间。这便是web报表开发技术专题的由来。废话少说,今天便从小小的序号说起吧!

   web报表开发技术专题一:序号问题

      在中国式报表中,常常会见到单元格中有
1,2,3,4 ….成一行或一列排列。这便是序号。显然这些序号值在数据源中是不存在的,需要web报表开发工具根据一定的规则运算出来。报表中的序号问题常常被一些通用的web报表开发工具所忽略,有时常常会因为一个序号无法生成而被迫要写代码,使web报表开发的效率受到大大的限制。

      凡是总须研究,才会明白。下面就来看看中国式报表中的序号大体有哪些样式?

      * 固定序号:即在表格中固定好的序号值,不会随数据内容的多少而变化。这种最简单了,直接在表格上输入序号值就可以了。

      * 动态序号:即序号值是不固定的,是根据数据源中的数据而定的。比如:记录数为8条,则序号为从1 8

      * 汉字序号:因为我们是中国人,序号常常用一,二,三,四等等来表示,这就需要必须能将数字序号转换成汉字序号。有时还会在序号的基础上加上括号(如:(1))或顿号(如:一、)等等。

      * 序号横向排列:序号有时会纵向排列,也常常会要求能横向排列。

      * 多列序号:分组报表是最常用的报表之一,由此就有根据每个分组字段都会有一个顺序号的问题。

      * 跨行的序号:分组报表往往会在其中有小计行,而如果这些小计行中不能要序号,就要求序号要跳过这些小计行。

      * 序号的延伸---序列值:有时报表中会有甲乙丙丁等序列值,这也可以看成是序号的一种吧。

    文字未免有些空洞,下面以几张图的形式来说明一下:

 

 

       在这个报表中,共有三列序号:总序号,地区序号,产品序号,总序号是直接从1开始的序号值,地区序号是对于每个地区来说从1开始的序号值,产品序号是对于每个地区的每个产品来说是从1开始的序号值。这是一个典型的多列序号的报表。

 

 

      在这个报表中,红色字的序号是跨小计行的,即小计行中是没有序号的。这是典型的跨行的序号的报表。同时在此报表的第二行兰色字的序号是横向排列的。即有多少个地区就有多少个序号值。这是典型的动态序号和序号横向排列的报表。

 

 

    在这个报表中,有汉字序号:一,二等,也有(1)的序号形式。也有序号的嵌套及多个层次的问题。

       上述是我想到的web报表中的序号的形式,还希望大家补充。上面给出了在中国式报表中的序号的可能的形式,相当于web报表开发的序号方面的需求。下面给出在e表中是如何设计并实现这些序号需求的。

       e表中解决上述复杂的序号问题还是靠提炼这些需求,总结出需要设置的报表公式,然后由用户根据自己的需要组合这些公式来实现的。当然,这些公式并不仅仅是为了解决序号的问题而特别设置的。

       e表中解决序号中可能会用到的公式有:

                row() 返回当前行号

                col() 返回当前列号

                &B1 返回分组中的第几组,或者说返回B1单元格扩展出来的第几格。

                ds.count() 返回分组中的每组的总数,或者说返回一个扩展单元格扩展出来的单元格的个数

                tochinese() 1,2,3 …转换成 一,二,三….

                Map() 显示值对照转换表函数,用于比如将1转换成甲,将2转换成乙等等。

    至于到底如何才能利用这些函数来解决序号问题。想深入地研究的朋友可以到方成公司的网站上在线试用或下载到本地试用上述报表的示例,通过示例可直接看到运行效果以及该如何利用这些函数来得到自己想要的序号。
   相关链接:
web报表开发技术专题二:报表工具的核心---数据集的变换
web报表开发技术专题三:不规则分组和跨行组运算
web报表工具的制表效率分析 

   注:本系列文章系本人原创,首发于博客园,转载请注明出处。

posted on 2007-07-03 10:12  web报表  阅读(9808)  评论(18编辑  收藏  举报