在Reporting Services中,分页往往是一件会让人困惑的事情,没有正确的设置属性会导致一些额外的空白页面或者一些不适当排版。这里给大家一些关于分页的建议,仅供参考。
在如何设置分页属性以前首先要阐明分页一共有两种,一种是物理分页(用于打印控件以及TIFF和PDF的输出),一种是逻辑分页(用于HTML和GDI输出)。
1、使用物理分页
你可以从报表的属性窗口中去设置报表的PageHeight和PageWidth属性。以及LeftMargin,RightMargin,BottomMargin,TopMargin这些打印页边距属性。比如你想输出为A4的纸,那么只要把PageHeight设置为29.7CM,PageWidth设置为21CM,不管WEB中看到的情况,输出为PDF都将是A4的大小。
有一件很重要的事情必须提醒就是当你在设计时设置的Body大小通常在显示的时候是没有用的。Body只是一个简单的装载报表对象的容器。在设计设置的Body大小如果小于最终产生的报表大小(如填充数据后的table比Body大)那么Body会自动扩大。通常的,Body都会比设置的大,所以Body的高度基本上可以不用控制。
那么物理分页是什么时候发生的呢?当运行时Body的大小(如果指定了Page Header 和Page Footer的大小,那么加上它们)超过了指定的Page大小(减去Margins)。有一点非常重要,因为控件在设计时并未绑定数据,所以设计时的报表不会超过Page的宽带,但是一旦绑定以后,如果超过了Page的宽度,那么将会产生非预期的布局。所以设计时最好别超过分界限。
2、使用逻辑分页
逻辑分页和物理分页有所不同。在SQL 2000 Reporting Services中,逻辑分页也使用PageHeight属性去决定分页。因为在Web Pages中并不存在真正的分页,分页只是为了减少在同一个页面中绑定的数据量。SQL 2005 Reporting Services增加了InteractiveHeight和InteractiveWidth两个属性去控制逻辑分页。实际上,InteractiveWidth目前并没有使用,当然在将来的版本可能会使用。而逻辑分页根据我的经历,并不是非常的有效,不同的控件产生的页面大小都不同,使用ReportViewer控件非常难控制大小,你能设置的仅仅是一个大约的值,系统在产生页面时会自动计算逻辑分页的大小和页面总数。当然使用InteractiveHeight属性也有一个非常棒的效果,那就是当你把这个值设为0,那么所有的数据将会产生在一个页面上。
最后,如果你想输出到EXCL,那么我建议你主动的去设置分页。你可以在大部分控件的属性中设置是否在该控件前或者控件后增加一个分页。