2012-04-11 68 views
4

这是我开始的。我有一个报告和一个子报告。使该子报表具有唯一性的是,子报表rdlc的XML是在运行时生成的,然后将流提供给报表查看器。这是以我们需要的方式布置数据的唯一方法。这份报告本身运作良好。RDLC动态子报表定义

现在我正处在一个要合并多个报告的位置。我用一个列表创建了一个报告。列表中有一个指向我原始报告的子报表。但是我试图弄清楚如何应用动态子报表,因为它是列表中每个报表的不同流。

我们已经在原始报告上做了很多工作来达到这一点,所以我不想重新考虑我的方法。

这里是我试过到目前为止:

  1. 为我流呼叫LoadSubreportDefinition当SubreportProcessing事件被调用列表中的每个报告。我非常确定这不起作用,因为您必须在报告呈现开始之前执行此操作。

  2. 找出一种方法来为动态子报表的名称指定表达式,以便我可以使用唯一ID调用LoadSubreportDefinition。例如,名称将类似于=“ImageSubreport”+ Parameters!ID.Value,我会调用LoadSubreportDefinition(“ImageSubreport1”,stream1),LoadSubreportDefinition(“ImageSubreport2”,stream2)。这在设计师看来是不可能的,所以我不认为这是可能的。

是否有某种方式可能分别生成每个报告,然后合并它们?

+0

哪个版本的Visual Studio和你与构建.NET版本。 – DRapp 2012-04-11 18:29:47

+0

VS 2008和.NET 3.5 – Dan 2012-04-11 19:16:31

+0

对于VS 2013和.NET 4.0,我有同样的问题。它加载主报表,但不加载子报表。我如何访问Subreport Name属性以通过代码动态更改它? – 2015-07-22 12:38:40

回答

2

您只需在调用LoadReportDefinition之后立即调用LoadSubReportDefinition。

让我们假设主报告指出,像这样子报表的定义:

<Subreport Name="Subreport1"> 
    <ReportName>MySubReport</ReportName> 
    ... 
</Subreport> 

,你有stream1代表主报告RDLC和stream2代表报表RDLC。

你需要做的是这样的:

this.ReportViewer1.LocalReport.LoadReportDefinition(stream1); 
this.ReportViewer1.LocalReport.LoadSubreportDefinition("MySubReport", stream2); 
+0

“MySubReport”是“姓名”还是“将此报告用作子报告文本框”。您在主报告的rdlc子报表属性中设置的子报表的子报表? – lionheart 2013-05-18 17:43:57