首先说明一下,之所以用乓旁门左道为题,主因是我不确定这是否是好的解决方法(有可能是小弟不材,若您有更好的或是正确的解法,希望不吝指教啰)
需求是这样的,User有一份送交某机关的报表,而这份报表它的第一页格式与第二页之后的明细格式是不相同的
简单的说,第一页是一张类似申请单的表格,从第二页之后才是明细资料的List
以往使用ReportViewer开发RDLC报表的经验,同一份报表大部份都是同样的格式,这次的需求算是第一次接触到
,花了点时间试了几个方式之后,最后利用二个Report的Table元件来实现这样的需求
先来看一下欲达成的报表长相
接着来看如何利用二个Table来达成以上的报表需求
(1)利用第一个Table,只保留Header,在Header里再拉一个Table,利用内层的Table来制作第一页的报表格式
内层Table编排后的效果
(2)接着在原本的页面上,再放置第二个Table,其作用做为呈现报表第二页以后的明细列表
(3)格式编排完之后,利用设定换页技巧来达到第一页只呈现第一个Table格式
在第一个Table的Properties里,设定在这个Table后安插换页符号,来达到呈现第一个Table格式之后,就马上换页
,如此一来第二个Table的明细格式资料自然而然的就呈现在第二页之后了,并且在第一个Table里并未设定每页
显示,因此第一个Table的格式并不会重覆于第二页之后的页面上
(4)至此差不多达成需求了,最后一个小问题是最后一页要多加呈现总计及二个签名栏位,这个部份利用Group分组来达成
,在第二个Table里用Group分组方式安插每18笔资料换行,并设定Group Footer,利用Group Footer编排最后一笔资料后,
要多加呈现的内容
分页计算式:=Int((RowNumber(Nothing)-1)/18),并勾选Page break at end
利用Group Footer建立最后一笔资料要呈现的内容
接着设定只需最后一笔资料后再呈现Group Footer,其余页面不呈现Group Footer
利用Visibility / Hidden 设定运算式:=iif((RowNumber(nothing) / Count(Fields!empname.Value, "xxxxx")) =1 ,false,true)
xxxx:Your DataSet Name
(5)在程式码里,由于使用到的二个主要Table的资料来源不同,因此利用RDLC可接受多个DataTable的特性,直接DataSources.Add给予二个DataTable资料即可
透过这样的方式,即达成此报表需求,若您有更好的方式也欢迎不吝告知啰
备注:
原本Footer的部份是直接使用第二个Table的Footer来做,不过Footer的部份却跑到另一个新页面,此问题后来在MSDN讨论里看到解决方式
,相关连结:RDLC Table页尾一问