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

时间:2014-06-13 05:31:59

标签: sql-server reporting-services reporting

我认为很多开发人员都面临着尝试使用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

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

="Page " + Code.PageNumber() + " of " + Code.TotalPages()

This解决方案不适用于SSRS 2008 R2。

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

4 个答案:

答案 0 :(得分:11)

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

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

=Variables!PageCount.SetValue(Variables!PageCount.Value+1)

每页都会自动增加。 (重要提示:不要将其隐藏在页眉或页脚中,如果隐藏框,则SetValue WON' T工作,因此将字体更改为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),Variables!PageCount.SetValue(Variables!PageCount.Value+1),"")
)

您需要在NOT IsNothing(ReportItems!TotalBox.Value)

时隐藏此框
=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"")
)

再次,您需要在IsNothing(ReportItems!TotalBox.Value)

时隐藏此框

当然,您可以使用其他方式来确定组实例的结束,例如: 创建一个文本框,它只包含组表末尾的固定值。并隐藏它。当你检查触发器时,只需按照我的方法进行操作。

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

答案 1 :(得分:0)

Visual Studio 2013 Report variables下,报告菜单下会显示Visible

从主菜单 - 报告> ReportProperties > 变量> 添加

答案 2 :(得分:0)

如果您使用的是SQL Server 2016 Report Builder,则此表达式适用于我。

=Globals!PageNumber.ToString() +"/" + Globals!TotalPages.ToString()

答案 3 :(得分:0)

这是有效的表达方式:

= Microsoft.VisualBasic.Interaction.Switch(Parameters!LANGUAGE.Value = "en-US", "Page " + code.PageNumber().ToString() + " of " + code.TotalPages().ToString(), Parameters!LANGUAGE.Value = "es-MX", "Hoja " + code.PageNumber().ToString() + " de " + code.TotalPages().ToString(), 1 = 1, "Page " +code.PageNumber().ToString() + " of " + code.TotalPages().ToString())