静观己心,厚积薄发

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

摘要:

  提供一种方案,使分页浏览的报表每页显示固定条数记录,最后一页记录条数不足的,用空行补齐。

示例:

  记录共7条,每页显示5条记录: 

原理:

  由于表的分组包含“在起始处分页”和”在结束处分页”的功能,所以我们考虑先将数据分成若干个记录条数为N的组,

再启用“在结束处分页”的功能。

  那么,如何分组呢?考虑记录的下标为 0,1,2,3... 的自然数序列,用下标除以N(设为3),得到以下数列:

  0  /3  取整:0

  1  /3  取整:0

  2  /3  取整:0

  3  /3  取整:1

  4  /3  取整:1

  5  /3  取整:1

  6  /3  取整:2

  所以,我们可以以下标除以3的商的整数值对数据进行分组,则每个分组包含3条数据。当记录条数不能被3整除时,最后一个分组会不足3。分组表达式为 =Int((RowNumber(Nothing) - 1) / N)。

  另一个需要考虑的问题是,最后一个分组的记录条数可能不足N,怎样以空白行补齐它呢?考虑TableRow.Visibility.Hidden属性,可通过表达式设置它的状态。为此,我们在详细信息组内额外添加N-1行,如果检查到当前是记录的最后一组最后一条并且该组记录条数不足N时,将Hidden设为Flase;其它情况为True。

表达式为=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() <= r,False,True)。其中r从1开始递增。

实现:

  1.新建WinForm项目,用报表向导添加一张报表,数据源为AdventureWorksDataSet的Employee数据库表,调整详细信息(这里只选择了表内前面7条数据):

  2.(以下都是在报表的设计模式中)在表内添加组,分组表达式为 =Int((RowNumber(Nothing) - 1) / 3),取消包括组头和包括组尾,勾选在结尾处分页:

  3.连续插入两行:

  4.选择插入的第一行(TableRow3),在Visibility的Hidden属性下选择“表达式”,在打开的文本框内填入

=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() <= 1, False, True);同理,在插入的第二行(TableRow4)同位置填入

=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() <= 2, False, True):

  5.运行程序,可以看到前两页分别只有3条记录,最后一页1条,空白处用空行补齐了:

注意:

  如果要在数据集记录条数为0的时候也达到这个效果,只能在数据传递到报表之前预处理,添加一行空记录。

__

原文:

http://www.cnblogs.com/ChenZB/archive/2011/01/07/1930198.html

posted on 2011-02-22 12:32  猎人杰  阅读(1164)  评论(0编辑  收藏  举报