按组重置RDLC报告中的页码

本文关键字:报告 RDLC | 更新日期: 2023-09-27 18:00:05

这看起来应该足够简单。我有一个报告,里面有Tablix,它有按客户划分的组,强制在组之间分页。我希望页码是每个客户的,所以页面应该是这样的:

Customer1 Page 1/2
Customer1 Page 2/2
Customer2 Page 1/1
Customer3 Page 1/4
etc, etc

我似乎找不到重置页码的方法,也找不到将总页数设置为组的总页数的方法。

按组重置RDLC报告中的页码

看起来这是不可能的,至少在VS 2012中是这样。我能够让它在SSRS的RDL中工作,然后我打开RDL,找到了相关的部分

<Group Name="MemberId">
  <GroupExpressions>
    <GroupExpression>=Fields!MemberId.Value</GroupExpression>
  </GroupExpressions>
  <PageBreak>
    <BreakLocation>StartAndEnd</BreakLocation>
    <ResetPageNumber>true</ResetPageNumber>
  </PageBreak>
</Group>

然后,我将其带回我的RDLC,并将<ResetPageNumber>true</ResetPageNumber>插入到我的组中。当我在VS中再次打开该文件时,显示了以下错误。

Deserialization failed: The element 'PageBreak' in namespace
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' 
has invalid child element 'ResetPageNumber' in namespace 
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition'. 
List of possible elements expected: 'BreakLocation' in namespace 
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' 
as well as any element in namespace '##other'. Line 1812, position 20.

最终结果是,我将把报告转移到ReportingServices。

实际上可以完成,但不需要向报告中添加一些自定义代码:

Shared reportGroup as String
Shared newPage  as Integer
Public Function ResetPageNumber(newGroup as String)
  If Not (reportGroup = newGroup)
    reportGroup = newGroup 
    newPage  = 1
  Else
    newPage  = newPage  + 1
  End If
  Return newPage
End Function

然后在页脚中,添加页码的文本框,并使其值为:

= Code.ResetPageNumber(ReportItems!TextBoxWithYourGroupNameOrID.Value)