4 votes

Passer des paramètres d'un rapport principal à un rapport secondaire dans RDLC

J'ai une page web qui affiche un rapport RDLC dans un ReportViewer. Pour chaque enregistrement du rapport principal, il existe un sous-rapport.

J'ai besoin de passer les données de 3 champs de chaque enregistrement du rapport principal comme paramètre à la procédure stockée des sous-rapports.

le rapport principal fonctionne, mais il indique simplement

Erreur : Le sous-rapport n'a pas pu être affiché

Tous les paramètres sont définis dans les deux rapports et je gère l'événement localReport_SubreportProcessing.

Code 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));
}

Code 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>                             

ET

<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>

2voto

user829081 Points 174

2voto

Noelle Points 307

J'ai dû changer l'ensemble de données pour chaque rapport, ils utilisent tous la même source de données et ensuite dans le code vous devez définir les paramètres pour chaque ensemble de données.

<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>

et ainsi de suite pour chaque source de données du rapport

en 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));
}

Je ne sais pas si c'est la bonne façon de faire, mais ça marche pour moi !

HTH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X