如何在SSRS 2008 R2的报告正文中显示页码?

Vin*_*n.X 8 sql-server reporting reporting-services

我认为很多开发人员都面临着尝试使用SSRS 2008 R2显示页码的问题.

有一种替代解决方案需要SSRS 2010 +版本.否则你会一直得到1.

转到"报告" - > "报告属性" - > "代码"

在该Custom Code部分中,输入以下内容:

Public Function PageNumber() as String
     Dim str as String
     str = Me.Report.Globals!PageNumber.ToString()
     Return str
End Function

Public Function TotalPages() as String
     Dim str as String
     str = Me.Report.Globals!TotalPages.ToString()
     Return str
End Function
Run Code Online (Sandbox Code Playgroud)

现在,您将能够在报表中的任何位置(标题,正文或页脚)访问这些函数.因此,要在位于正文中的文本框中输出页码和总页数,只需输入以下值:

="Page " + Code.PageNumber() + " of " + Code.TotalPages()
Run Code Online (Sandbox Code Playgroud)

解决方案不适用于SSRS 2008 R2.

但是有一种解决方法,它适用于任何高于2008 R2(包括2008 R2)的版本.我将作为答案发布,希望它能帮助那些在这个问题上挣扎的人.

Vin*_*n.X 11

首先,您需要使用报告变量: 右键单击报告的空白区域 - >变量 - >创建一个变量,如PageCount(将默认值设置为0)

然后在你的页眉或页脚 - >创建一个文本框并设置表达式 - >

=Variables!PageCount.SetValue(Variables!PageCount.Value+1)
Run Code Online (Sandbox Code Playgroud)

它会自动增加每页.(重要提示:不要将其隐藏在页眉或页脚中,如果隐藏框,则SetValue将不起作用,因此将字体更改为1或将文本更改为白色,执行任何操作,只是不要隐藏它(它将打印'True'因为设置发生了))

然后你可以使用:

=Variables!PageCount.Value
Run Code Online (Sandbox Code Playgroud)

在报告正文的任何​​部分访问页码.

重要提示:请注意,我尝试使用Globals!PageNumber来设置变量但最终无法从报表正文中访问它.所以,它必须是Header/Footer OR Body可以访问的东西.

就我而言,我必须重置每个组实例的页码.所以我只是在小组结束时设置一个触发器.(例如,我检查是否有我的总值返回,因为我知道我的组的每一端都有一个总显示.

因为函数中的IIFTrue和False部分都会被处理,所以如果你把setter放在IIF如下所示:

=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),Variables!PageCount.SetValue(0))

 ) 
Run Code Online (Sandbox Code Playgroud)

你最终会得到值0,因为报告将检查True Part然后是False部分,两个setter都将被执行(值将被设置两次)

所以我们需要2个盒子和类似的东西:( 你必须隐藏不必要的盒子你的检查条件)

=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),"")
)
Run Code Online (Sandbox Code Playgroud)

你需要隐藏这个框 NOT IsNothing(ReportItems!TotalBox.Value)

=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"")
)
Run Code Online (Sandbox Code Playgroud)

再次,您需要隐藏此框 IsNothing(ReportItems!TotalBox.Value)

当然,您可以使用其他方式来确定组实例的结束,例如:创建一个仅在组表末尾包含固定值的文本框.并隐藏它.当你检查触发器时,只需像我一样做同样的方法.

它适用于2008 R2以上的所有版本(包括在内).

  • @ Vin.X不要为我工作!在SQL Server 2012中 (2认同)
  • 这会在返回页面时增加页码。 (2认同)