2012-10-10 248 views
2

我有一个网页,在ReportViewer中显示RDLC报告。主报告中的每条记录都有一个子报告。将参数从主报告传递到RDLC中的子报告

我需要将主报表中每个记录的3个字段的数据作为参数传递给子报表存储过程。

主报告工作,但它只是说

Error: Subreport could not be shown

我在这两份报告中定义的所有参数,而我处理localReport_SubreportProcessing事件

C#代码

protected void Page_Load(object sender, EventArgs e) 
{  
    this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Refs_MainDs", SqlDs_RefsReportsMain)); 
    this.ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(localReport_SubreportProcessing); 
} 
void localReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) 
{ 
    e.DataSources.Add(new ReportDataSource("Refs_SubDs", SqlDs_RefsReportsSub)); 
} 

ASP代码

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="800px" Width="100%" Font-Names="Verdana" Font-Size="8pt" BorderColor="#666666" 
    BorderStyle="Solid" BorderWidth="1px" AsyncRendering="False" ShowPrintButton="False" > 
<LocalReport ReportPath="Reports\EOD_Refs_MainReport.rdlc" > 
    <DataSources> 
     <rsweb:ReportDataSource DataSourceId="SqlDs_RefsReportsMain" Name="Refs_DataSource" /> 
     <rsweb:ReportDataSource DataSourceId="SqlDs_RefsReportsSub" Name="Refs_DataSource" /> 
    </DataSources> 
</LocalReport>        

<asp:SqlDataSource ID="SqlDs_RefsReportsMain" runat="server" ConnectionString="<%$ ConnectionStrings:AlphaConnectionString %>" 
    SelectCommand="rpt_RefsReport_Main" SelectCommandType="StoredProcedure"> 
<SelectParameters> 
    <asp:QueryStringParameter Name="RefsID" QueryStringField="RefsID" Type="String" /> 
</SelectParameters> 

+1

您已经在子报表中设置了您的参数以从父报表的Fields集合中检索它们的值? –

+1

此外,虽然我没有这样做过网络报告:ReportDataSource标记的名称属性应该是相同的吗? –

+3

最后,作为一个实验,可能值得看看是否可以自行加载子报表。 –

回答

2

我需要改变每个报告的数据集都仍然使用相同的数据源,然后在代码你需要设置每个数据集的参数

<rsweb:ReportViewer ID="ReportViewer1" runat="server" AsyncRendering="False" ShowPrintButton="False" > 
<LocalReport ReportPath="Reports\Report_MainReport.rdlc" > 
    <DataSources> 
     <rsweb:ReportDataSource DataSourceId="SqlDs_ReportsMain" Name="EOD_Summary_DataSource" /> 
     <rsweb:ReportDataSource DataSourceId="SqlDs_ReportsMid" Name="EOD_Summary_DataSource" /> 
     <rsweb:ReportDataSource DataSourceId="SqlDs_ReportsSusp" Name="EOD_Summary_DataSource" /> 
     <rsweb:ReportDataSource DataSourceId="SqlDs_ReportsRef" Name="EOD_Summary_DataSource" /> 
    </DataSources> 
</LocalReport>        

<asp:SqlDataSource ID="SqlDs_ReportsMain" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="rpt_HighLevel" SelectCommandType="StoredProcedure"> 
<SelectParameters> 
    <asp:QueryStringParameter Name="Key" QueryStringField="Key" Type="String" /> 
</SelectParameters> 

等在C#中的每个报表数据源

protected void Page_Load(object sender, EventArgs e) 
{  
    this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("MainLevelDs", SqlDs_ReportsMain)); 
    this.ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(localReport_SubreportProcessing); 
} 
void localReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) 
{ 
    e.DataSources.Add(new ReportDataSource("MidLevelDs", SqlDs_ReportsMid)); 
} 

不知道这是否是做了正确的方式,但它的工作原理为了我!

HTH