近期因为专注于用 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() 返回分组中的每组的总数,或者说返回一个扩展单元格扩展出来的单元格的个数
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225053.html原文链接:https://javaforall.net
