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

SSRS (Winforms - RDLC) 2016. Control footer contents based on Row data

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

该报告是一个 .rdlc(实际上有几个带有子报告),并在本地运行。

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

我知道我不能在页脚中放置图表,但这没问题,因为我可以预先生成页脚所需的图像,但是我仍然需要一种将正确图像链接到页脚的方法.

有一些全局页面,它们都包含相同的页脚图像和全局页码。这些构成了前几页和最后几页。所以基本上这些都可以。

报告中间还有一些动态报告部分,这些是 Tablix 中的一系列子报告,这些部分中的每一个可能跨越多个页面,都会有一个特定的报告页脚设置当前部分的数据集行键。 Tablix 将此 id Through 作为参数传递给 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 数组,然后由页脚引用。但当然,全局页码在报表正文中不可用。

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

结果证明解决方案并不明显。

我在包含子报表的 Tablix 中添加了一个 TextBox,并将该 TextBox 的值设置为我需要的数据键,我将其命名为 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)