在SSRS 2016中,我有一个报表,针对多个客户。每个客户都有单独的信笺,创建后缝合在报表后面。
现在,我想在运行时根据一个xy位置值改变一个文本框或tablix的位置,该值存储在每个客户的应用程序配置中。
如何实现这个目标?在位置属性字段中输入一个表达式是行不通的。
如果没有动态定位,我需要为每个客户创建一个报表,当你有几十个客户时,这是一个非常糟糕的变通方法。
要垂直地、动态地定位东西,或者至少给人一种它在做这个的印象,那么你可以试试下面的方法。
要知道,这是我的头顶,未经测试。
假设信头上最小的logo是3cm,最大的是6cm。
将一个文本框(我们将其称为 padTextBox
)从报表顶部3cm处开始。将高度设置为小的东西(0.2cm或其他)。
接下来在下面添加你的文本框或tablix。padTextBox
.
现在我们需要动态地设置 padTextBox
.
我们可以通过在运行时添加动态数量的空行来实现。
听起来你已经有足够的信息来确定Y的位置。你需要将其转换为空行数,而空行数又取决于在 padTextBox
因此,例如,Y位置5cm可能需要3行空白,在 padTextBox
所以文本框的底部位于5cm处。
要添加空行,我想你必须添加一些自定义代码,因为我认为没有一个内置的函数可以重复字符串。
下面的代码应该可以做到
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)
你懂的...
希望这能帮到你...
除非不能在运行时动态设置位置,否则在builddeploy时间设置呢?
报告文件是XML的。所以在源头控制下,有一个主文件给所有客户。当需要部署时,可以用脚本(即PowerShell)打开文件,从配置文件或数据库中读取特定客户的位置,并在xml中临时设置相关的位置值.然后为这个客户构建和部署报表,并将更改的内容还原。