在代码中设置报表数据集参数

Set Report Dataset Parameter in code

我在 ASPX 页面的 ReportViewer 控件中有大量报告 运行 作为 ServerReport

每个报告都使用相同的 3 个共享数据集。每个数据集至少有一个参数。

我需要将一个值(在运行时)传递给这些数据集的每个参数,但不知道如何操作。

我尝试使用 ReportViewer1.ServerReport.GetDataSources(),但它说谎并说数据集为零,而我知道有一些...

我知道我可以为每个报告添加一个隐藏参数,但这意味着要修改数十个报告,所有这些都以 完全 相同的方式进行,这让我觉得打破了 DRY 原则...

有什么建议吗?

这是我想到的几个选项。

选项 1:按照您的建议将参数添加到报告中。我不认为这违反了任何原则,因为报告是封装的单位,而且您设计的是报告本身是可参数化的(或不可参数化的)。作为 C# 报表的调用者,您不需要了解幕后的数据集,因为它是您与之交互的报表。

或者,您需要找到一种方法,使报告不知道数据集在 运行 时间被参数化,所以...

选项 2:制作一个存储过程,该过程采用参数,执行数据集执行的操作,并将结果放入 table。在调用任何报告之前以编程方式调用它。然后,报告数据集可以从 table 结果中获取数据。

选项 3:在 运行 时间将 运行-time 参数弹出到临时 table,这样数据集就可以从数据库中自行获取它而不需要它作为数据集的参数。

选项 4:探索 caching Shared Datasets。 这听起来像是一条死胡同,但您有机会找到一种方法让所有报告都使用数据的新缓存版本。