【问题标题】:Reporting Services: Position of Textbox or Tablix depending on parameter or dataset fieldReporting Services:文本框或 Tablix 的位置取决于参数或数据集字段
【发布时间】:2020-05-20 10:29:38
【问题描述】:

在 SSRS 2016 中,我为多个客户编写了一份报告。每个客户都有单独的信头,这些信头在创建后缝合在报告后面。

现在我想在运行时根据 x/y 位置值更改文本框或 tablix 的位置,该值存储在每个客户的应用程序配置中。

如何做到这一点?在位置属性字段中输入表达式不起作用。

如果没有动态定位,我需要为每个客户创建一个报告,当您有几十个客户时,这是一个非常糟糕的解决方法。

【问题讨论】:

    标签: reporting-services ssrs-2016


    【解决方案1】:

    要垂直、动态地放置东西,或者至少给人一种这样做的印象,那么您可以尝试以下方法。


    请注意,这是我的想法,未经测试。


    假设信头上最小的标志是3cm,最大的是6cm。

    从报告顶部 3 厘米处开始放置一个文本框(我们将其称为 padTextBox)。将高度设置为较小的值(0.2cm 或其他值)。

    接下来在padTextBox 下添加您的文本框或tablix。

    现在我们需要动态设置padTextBox 的高度。

    我们可以通过在运行时添加动态数量的空行来做到这一点。

    听起来您已经有足够的信息来确定 Y 位置。您需要将其转换为多个空白行,这又取决于padTextBox 中设置的字体大小,例如,Y 位置 5cm 可能需要padTextBox 中的 3 个空白行,因此文本框的底部位于5厘米。

    要添加空行,我认为您必须添加一些自定义代码,因为我认为没有可以重复字符串的内置函数。

    以下应该做到这一点

    Public Function GetBlankRows(n as integer) as String
    dim s as string
    s = ""
    dim i as integer
    for i = 1 to n
        s = s &  vbcrlf
    next i
    
    return s
    
    End Function
    

    最后,我们需要将padTextBox 的表达式设置为类似

    =Code.GetBlankRows(Fields!YLines.Value)

    =Code.GetBlankRows(Parameters!YLines.Value)

    你懂的……

    希望这会有所帮助...

    【讨论】:

    • 嗯,确实可以通过添加空行来增加 Y 位置。对于 X 位置,我可以添加空格。但这是一个非常弱的解决方法,因为它仅适用于非常简单的单行文本框。正如标题中提到的,我还必须使用 tablix 来动态定位。
    • 这个想法是您的文本框和 tablix 控件位于“填充”文本框旁边,我并不是建议您将报告内容放入其中。您可以根据需要添加一些。由于没有您想要的定位控制的本地方法,这只是一种解决方法。我知道这并不完美,但我不确定您还有什么其他选择。
    【解决方案2】:

    除非无法在运行时动态设置位置,否则在构建/部署时设置它呢?

    报告文件是 XML。因此,在源代码控制下为所有客户提供一个主文件。当需要部署时,脚本(即 PowerShell)可以打开文件,从配置文件或数据库中读取特定客户的位置,并在 xml 中临时设置相关位置值。 然后它为该客户构建和部署报告并恢复更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多