有一种替代解决方案需要SSRS 2010版本.否则你会一直得到1.
转到“报告” – > “报告属性” – > “码”
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
现在,您将能够在报表中的任何位置(标题,正文或页脚)访问这些函数.因此,要在位于正文中的文本框中输出页码和总页数,只需输入以下值:
="Page " + Code.PageNumber() + " of " + Code.TotalPages()
但是有一种解决方法,它适用于任何高于2008 R2的版本(包括2008 R2).我将作为答案发布,希望它能帮助那些在这个问题上挣扎的人.
解决方法
右键单击报告的空白区域 – >变量 – >创建一个变量,如PageCount(将默认值设置为0)
然后在你的页眉或页脚 – >创建一个文本框并设置表达式 – >
=Variables!PageCount.SetValue(Variables!PageCount.Value+1)
它会自动增加每页.
(重要提示:不要将其隐藏在页眉或页脚中,如果隐藏框,则SetValue将无法工作,因此将字体更改为1或将文本更改为白色,执行任何操作,只是不要隐藏它(它将打印’True’随着设置发生)))
然后你可以使用:
=Variables!PageCount.Value
在报告正文的任何部分访问页码.
重要提示:请注意我尝试使用Globals!PageNumber来设置变量但最终无法从报表正文中访问它.所以,它必须是Header / Footer OR Body可以访问的东西.
就我而言,我必须重置每个组实例的页码.
所以我只是在组的末尾设置一个触发器.
(例如,我检查是否有我的总值返回,因为我知道我的组的每一端都有一个总显示.
由于函数IIF中的True和False部分都将被处理,所以如果你把setter放在IIF中,如下所示:
=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),Variables!PageCount.SetValue(0)) )
你最终会得到值0,因为报告将检查True Part然后是False部分,两个setter都将被执行(值将被设置两次)
所以我们需要2个盒子,比如:
(你必须隐藏不必要的盒子你的检查条件)
=IIF(IsNothing(ReportItems!TotalBox.Value),"") )
NOT IsNothing时,您需要隐藏此框(ReportItems!TotalBox.Value)
=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"") )
再次,您需要在IsNothing(ReportItems!TotalBox.Value)时隐藏此框
当然,您可以使用其他方式来确定组实例的结束,例如:
创建一个文本框,它只包含组表末尾的固定值.并隐藏它.当你检查触发器时,就像我一样做同样的方法.
它适用于2008 R2以上的所有版本(包括在内).