补充空白行与分页
补充空白行
选中任意一个包含数据集属性的单元格,在属性面板上可以看到它有个名为“补充空白行”的属性,默认该属性处于关闭状态,当我们将其打开后,就需要输入具体的“数据行倍数”,如下图所示:
在上图中,一旦我们将某个包含数据集的单元格的补充空白行属性打开,并设置了具体的数据行倍数,那么报表在计算当前单元格对应的数据时,会根据这里设置的具体倍数来决定是否填充空白行,以及填充多少行空白行。比如当前单元格对应的数据集属性,在报表计算后共有3条数据,而我们又将该单元格补充空白行属性打开,并设置了数据行倍数为5,那么引擎就会拿当前数据集计算后的条数,也就是3 mod 数据行倍数值5,其结果是2,那么引擎将在这个单元格展开后的最后一行添加两行空白行(如果当前单元格展开后的条数是10,因为10 mod 5等于0,那么引擎将不添加空白行)。
对于添加的空白行,引擎将根据当前单元格所在行对应的每一列中单元格的样式来设置空白行中每列每个单元格的样式,也就是说,如果当前单元格所在行每列对应的单元格都没有边框线,那么添加的空白行每列中每个单元格都没有边框线,反之亦然。
看一个例子,在下图中,报表模版A1单元格的填充空白行属性打开,数据行倍数是5,如下图所示:
在A1单元格对应的数据集属性中,报表运行时数据共6条,6 mod 5=1,所以引擎还会在最后一个A1单元格所在行后添加4行空白行(因为要求数据行是5的倍数,所以实际运行会加四行空白行),运行后效果如下图所示:
分页
了解这些内容后,再配合之前介绍的条件属性以及行类型,就可以做出一些复杂的样式及特殊分页要求的主从明细型报表。
下图中是一个典型的主从明细型报表,在这个报表中,我们就将行类型,填充空白行,条件属性等功能进行结合使用,如下图所示:
在B4单元格我们将其补充空白行属性打开,并设置数据行倍数为10,同时选中B4单元格,点击条件属性的配置条件按钮,可以看到我们也为其配置了一个条件,如下图所示:
在这里,我们添加了一个条件表达式,那就是&B4 % 10==0是否成立,如果成立,那么就在这个单元格所在行后进行分页。
关于&B4
&B4是UReport2中提供的一个表达式,用来获取对应单元格展开后的行号,这里&B4 % 10就是拿B4单元格展开后的行号值与10除求余,看余数是否等于0,如果是就在这个单元格所在行后进行分页。
运行后的报表如下图的所示:
点击打印,可以看到如下图所示的打印预览效果:
如果我们将B4所在行所有单元格边框线去掉,那么生成的效果就是下面的样子:
在这个例子当中,报表打印输出时之所以会出现上图所示效果,是因为当我们为B4单元格定义了填充空白行的数据倍数为10的时候,那么对于每个明细下的B4单元格展开后的数据量行数都会是10的倍数,如果不是则会自动填充空白行以达到10的倍数。同时对于B4单元格我们又为其设置了条件属性,条件是&B4 % 10 =0,也就是判断B4单元格展开后当前行号整除10的余数是不是0,如果是就在B4单元格所在行后进行分页。通过上述关键的两个设置就实现了这种每页行数一样(带有填充空白行)效果主从明细类报表。
关于分页
需要注意的是,在实现这种类型报表时,在采用“自动”类型的分页方式时,要保证每一页的行对应的所有行高,不要超过当前页可用高度;当采用“固定行数”类型的分页方式时,要保证固定行数分页的行数值,与条件属性中对应的分页配置匹配。