【问题标题】:How to Display Page Number in Report Body of SSRS 2008 R2?如何在 SSRS 2008 R2 的报表正文中显示页码?
【发布时间】:2014-06-13 05:31:59
【问题描述】:

我想很多开发者都面临着尝试使用 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)。我将发布作为答案,希望它能帮助一些在这个问题上苦苦挣扎的人。

【问题讨论】:

  • 不适合我!在 SQL Server 2012 中。
  • 这在 SQL Server 2016 中不起作用。
  • @HuseinRoncevic 对不起,我在 2014 年写了这篇文章,我还没有机会使用 SSRS 2016.........

标签: sql-server reporting-services reporting


【解决方案1】:

首先您需要使用报表变量: 在报表空白处右键->变量->创建PageCount等变量(设置默认值为0)

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

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

每页都会自动增加。 (重要提示:不要将其隐藏在页眉或页脚中,如果隐藏框,SetValue 将不起作用,因此将字体更改为 1 或将文本更改为白色,无论做什么,不要隐藏它 (它会在设置发生时打印“True”))

那么你可以使用:

=Variables!PageCount.Value

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

重要提示:请注意,我尝试使用 Globals!PageNumber 设置变量,但最终无法从报告正文中访问它。所以,它必须是可以从页眉/页脚或正文访问的东西。

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

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

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

 ) 

你最终会一直有值 0,因为报告会先检查 True 部分然后检查 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 以上的所有版本(包括在内)。

【讨论】:

  • @Vin.X 不适合我!在 SQL Server 2012 中
  • 这会在返回页面时增加页码。
  • 这对我不起作用。虽然标题中的文本框显示 TRUE 但变量仍然为 0。但是如果我单击工具栏中的“打印布局”按钮,变量将会改变。
【解决方案2】:

如果您使用的是 SQL Server 2016 报表生成器,则此表达式适用于我。

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

【讨论】:

  • 问题是关于 SSRS 2008。
  • 你能解释一下它是如何为你工作的吗?
  • 把上面的表达式放在方框的“表达式”字段中。我正在使用 Microsoft Report Builder 工具。
【解决方案3】:

这是工作表达式:

=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())

【讨论】:

    【解决方案4】:

    Visual Studio 2013 Report variables 将是 Visible 在报告菜单下。

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

    【讨论】:

      【解决方案5】:

      首先按照以下步骤1进行分页
      1)
      1.1。单击“行组”窗格中的“详细信息”组。
      1.2.从 Tablix 成员属性窗格中,展开“组”->“PageBreak”。
      1.3.将“BreakLocation”设置为“End”,并将“Disable”属性设置为如下表达式:

      =IIF(rownumber(nothing) mod 40=0,false,true)  
      

      上面的第1点是用来在报表输出中进行分页的(输出中每页只显示40条记录)

      2) 使用自定义代码:

      Public Function PageNumberno(val as integer) as String
           Dim str as String
           str =(val/40)
           Return str
      End Function
      

      3) 在数据集中创建计算列,并在表达式中输入=0

      4) 在 2 个计算列中
      1)Pageno
      2)没有
      在数据集中

      在报告正文中使用 PageNo 的表达式:

      =code.PageNumberno(Rownumber("DataSet1"))
      

      使用表达式:

       =IIF(Instr(code.PageNumberno(Rownumber("DataSet1"))
      ,".")<>0,
      (Left(code.PageNumberno(Rownumber("DataSet1")),
      (Instr(code.PageNumberno(Rownumber("DataSet1")),".")-1))+1)
      ,code.PageNumberno(Rownumber("DataSet1"))
      )
      

      5)右键单击并在右侧插入列,并在列名中在文本框中添加代码

      =ReportItems!No.Value
      

      注意:否为计算字段列名。

      6) 在 AdvancedMode IN Row Group 下选择 Static 并将 RepeatOnNewPage Properties 设置为 True

      在第 5 点下创建的上述列中,将在报告正文的每一页中显示正确的页码

      我已经试过了,它工作正常..试试看。

      【讨论】:

      • 在 RB 中运行报告时出现此问题:用于计算字段“否”的表达式包括聚合、RowNumber、RunningValue、Previous 或查找函数。 Aggregate、RowNumber、RunningValue、Previous 和 lookup 函数不能用于计算字段表达式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多