2012-04-11 33 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