0

我有一份主要报告和几份子报告。本质上,我想将每个子报告轮流显示大约 30 秒,然后隐藏第一个,然后显示下一个,然后在所有时间结束后重新启动。

谢谢

4

1 回答 1

0

我“认为”你可以做到这一点,但有一些警告。

您将需要设置一个数据库表来存储当前循环位置,例如,如果您有多个此类报告,您可以将其键入报告名称。

(请注意,这些名称用于主报告,与子报告无关)

ReportName     LoopPosition LoopMax
MyMainReportA        0         3
AnotherReport        7        10 

将数据集(让我们调用它dsLoop)添加到您的主报告中,以更新此值并返回类似的内容。(未经测试)

DECLARE @LoopPosition int
SELECT @LoopPosition =  CASE LoopPosition WHEN LoopMax THEN 1 ELSE LoopPosition + 1 END
    FROM myReportLoopTable 
    WHERE ReportName = 'MyMainReportA'

    UPDATE myReportLoopTable Set LoopPosition = @LoopPosition WHERE ReportName = 'MyMainReportA'

SELECT @LoopPosition as LPos

这段代码只是将 LoopPosition 加 1,或者如果我们达到最大值,则将其重置为 1。然后它返回这个值。

现在pLoopPos向您的主报表添加一个参数(这可以是一个隐藏参数)并将其设置为我们的新dsLoop数据集的默认值。

现在将每个子报表的隐藏属性更改为仅在 Parameters!pLoopPos.Value = x 时显示子报表,其中 x 是子报表的顺序。

现在,当报告运行时,它将更新循环位置并获取新值。第一个子报表将显示为 pLoopPos 将为 1 。当您的报告刷新(通过 AutoRfresh 属性)时,dsLoop数据集将被重新评估,这将运行代码来更新值。pLoopPos 值将增加并显示下一个子报表。

您可能必须强制始终刷新参数(从参数属性)。

请注意,这是未经试验和测试的。这只是我的想法,所以我建议在花太多时间尝试实施它之前先做一个简单的测试报告。

更新:2018-04-10在您的后续问题之后,看起来使用该参数不起作用,因为它没有被刷新。但是,您可以dsLoop直接使用返回的值。要进行更改,只需换掉

Parameters!pLoopPos.Value=First(Fields!LPos.Value, "dsLoop")

注意:我稍微修改了 dsLoop 查询,为最终结果命名(LPos)。

您现在应该能够删除不再使用的参数。

于 2018-04-06T09:34:39.267 回答