SSRS(Winforms - RDLC)2016。基于行数据控制页脚内容

时间:2018-05-24 14:04:09

标签: reporting-services rdlc

我们使用ReportViewer控件在Windows应用程序中进行报表托管和生成。

该报告是.rdlc(实际上有几个子报告),并且是本地的。

我需要对页脚中的内容进行额外控制,现在需要显示最小的图表数据,这对报告部分很敏感。

据我所知,我不能在页脚中放置图表,但这不是问题,因为我可以生成前端所需的图像,但是我仍然需要一种方法将正确的图像链接到页脚。 / p>

有一些全局页面,它们都包含相同的页脚图像以及全局PageNumber。这些组成了前几页和最后几页。基本上这些都很好。

报告中间还有一些动态报告部分,这些部分是Tablix中的一系列子报告,这些部分中的每一部分可能跨越多个页面,将具有由数据集设置的特定报告页脚当前部分的行键。 Tablix将此id传递给SubReports作为参数,因此我有一个想法,我可以使用函数而不是直接设置参数。

这里的想法是更新代码中的全局变量,该变量可以在页脚中访问,以便为任何图像路径提供动态元素。

public shared dim HeaderIndex as Int32 = 0

Public Function HeaderPassThrough(ByVal index As Int32) As Int32 
  HeaderIndex = index
  Return index
End Function

正如您可能已经知道它不起作用,只要页脚查询Code.HeaderIndex的值,它就是要处理的最后一个部分的值。因此,页脚会在报告正文之后生成。

我无法提前合理地知道页码,1个部分可能会流向单个页面,另外20个部分,因此我生成的任何自定义内容都会根据HeaderIndex生成,而不是页码。

我认为有一种方法可以将页码放到页面中,因为在这种情况下可以存储页码/ HeaderIndex数组,然后由页脚引用。但是,当然报告正文中没有全局PageNumber。

我很想听听有关如何根据报告数据动态控制页脚内容的想法。

1 个答案:

答案 0 :(得分:0)

解决方案结果不太明显。

我在包含子报告的Tablix中添加了一个TextBox,并将该TextBox的值设置为我需要的Data键,我将其命名为HeaderIndex

然后可以通过ReportItems!HeaderIndex.Value

在页脚中引用此值

然而,这只是解决方案的一部分,因为该值只会填充在子报表的第一页上。

所以我将以下函数添加到报告代码部分:

public shared dim LastHeaderIndex as Int32 = 0

Public Function HeaderPassThrough(ByVal index As String) As String
  If Index = "" Then
      Return LastHeaderIndex.ToString()
  Else
      LastHeaderIndex = Integer.Parse(index)
  End IF  
  Return index
End Function

所以现在我可以在呈现报告之前生成页脚图像,并将它们保存在通过HeaderIndex键入的文件系统上。

页脚中每个图像的路径可以是包含以下内容的表达式(它提供页脚所在的部分标识符):

=Code.HeaderPassThrough(ReportItems!HeaderIndex.Value)
相关问题