none
ReportViewer Report with Subreport RRS feed

  • Question

  • Hi,

     

    The french original version is at the end of this post.

     

    I cannot open a subreport in my report.

     

    My configuration is :

    SQL Server 2008 R2 Reporting Services (BIDS)

    SQL Server CE

    Visual Studio 2010 PRO (VB)

     

    Here's how I do it:

    1)      I create a RDL report and a RDL subreport with BIDS

    2)      I copy the RDL files in the directory of my project and I rename them to RDLC

    3)      In my project, I add an existing item and I select the RDLC files

    4)      I open the RDLC reports and I save them (conversion to the RDLC format)

    5)      I copy the converted RDLC files to in the directory where the files must be stored in order to be used in my application

    6)      I don't create a ReportViewer control in my form, but in the code.

    7)      I run my project, the report opens normally, but the subreport displays the error: Failed to recover data for the subreport ' SubReport_Détail_MP_Non_pulvérulente', located in the following location: C:\Users\Stéphane\AppDataRoaming\PWM\AU\1.0.0.0\Système\SubReport – Détail MP Non pulvérulente.rdlc. For more information, see the log files.

     

    For information, I don't create the RDLC report directly in my project because I need the fields from multiple tables and I can't use queries to create RDLC report. This is for this reason I create first the RDL report with the BIDS then I convert them in my project.

    Note that there are no concerns for access to different files, or the SQL CE database.

     

    About the code below :

    At the form load, New is executed wich execute Affiche_Rapport

    Affiche_Rapport execute in turn Affiche_Rapport_et_Sous_rapport

    Affiche_Rapport_et_Sous_rapport display the report wich contain a subreport and then execute the event SubReportProcessingEventHandler

    SubReportProcessingEventHandler finaly execute Affiche_Sous_rapport


    PS : http://www.gotreportviewer.com or other like google already seen

     

    Thanks for your help,

    Stéphane



    Friday, June 24, 2011 8:02 AM

Answers

  • This problem is resolved

    Therefore, I don't know why and I don't understand why that work now and not before, but I don't care, the essential is that's work !

    • Marked as answer by Stéphane2009 Monday, July 4, 2011 12:07 PM
    Monday, July 4, 2011 12:07 PM

All replies

  • Public Class Form_Report_DétailMP_non_pulvérulente

     

        Dim numéro_mp As Integer

     

        Sub New()

     

            ' Cet appel est requis par le Concepteur Windows Form.

            InitializeComponent()

     

            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().

            Affiche_Rapport()

     

        End Sub

     

        Sub Affiche_Rapport()

     

            Dim Report_FileName As String = "Report - Détail MP Non pulvérulente"

            Dim Report_connection As SqlCeConnection = connection_bdd_appli

     

            Dim Report_ReportingServices_DataSetName As String = "DataSet_SQL_Détail_MP_Non_pulvérulente"

     

            Dim TLP As TableLayoutPanel = Me.TableLayoutPanel1

            Dim numéro_colonne As Integer = 0

            Dim numéro_ligne As Integer = 0

     

            Dim Report_Requête_SQL As String = "SELECT numero_ce, synonymes, etat, detail_etat, nom, numero_cas, pression_interne, coefficient_de_securite, temperature_utile, cp, taux_d_evaporation, densite_liquide_eau, densite_vapeur_air, lse, lie, masse_molaire, matiere_premiere.numero_auto"

     

            Report_Requête_SQL &= " FROM matiere_premiere"

            Report_Requête_SQL &= " LEFT OUTER JOIN detail_etat_physique ON numero_detail_ep = detail_etat_physique.numero_auto"

            Report_Requête_SQL &= " LEFT OUTER JOIN etat_physique ON numero_ep = etat_physique.numero_auto"

     

            With variables.integers

     

                numéro_mp = .Transfert_NuméroAutoMP_Vers_Report_Détail_MP_non_pulvérulente

                .Transfert_NuméroAutoMP_Vers_Report_Détail_MP_pulvérulente = -1

     

            End With

     

            Report_Requête_SQL &= " WHERE etat <> N'Pulvérulent' AND matiere_premiere.numero_auto = " & numéro_mp

     

            Affiche_Rapport_et_Sous_rapport(Report_FileName, Report_connection, Report_Requête_SQL, Report_ReportingServices_DataSetName, TLP, numéro_colonne, numéro_ligne)

     

        End Sub

     

        Sub Affiche_Rapport_et_Sous_rapport(ByVal Report_FileName As String, ByVal Report_Connection As SqlCeConnection, ByVal Report_Requête_SQL As String, ByVal Report_ReportingServices_DataSetName As String, ByVal TLP As TableLayoutPanel, Optional ByVal numéro_colonne As Integer = 0, Optional ByVal numéro_ligne As Integer = 0)

     

            Dim rv As New ReportViewer

     

            AddHandler rv.LocalReport.SubreportProcessing, AddressOf SubreportProcessingEventHandler

     

            Dim report_file As String = variables.strings.CurrentUserApplicationData & "\Système\" & Report_FileName & ".rdlc"

     

            Dim sc As New SqlCeCommand(Report_Requête_SQL, Report_Connection)

            Dim sda As New SqlCeDataAdapter(sc)

     

            Dim rds As New ReportDataSource

            Dim ds As New Data.DataSet

     

            With sda

     

                .Fill(ds)

                .Dispose()

     

            End With

     

            With rds

     

                .Name = Report_ReportingServices_DataSetName

                .Value = ds.Tables(0)

     

            End With

     

            With rv

     

                .Dock = System.Windows.Forms.DockStyle.Fill

     

                .Reset()

     

                With .LocalReport

     

                    .ReportPath = report_file

     

                    With .DataSources

     

                        .Clear()

                        .Add(rds)

     

                    End With

     

                End With

     

                .ProcessingMode = ProcessingMode.Local

     

                .RefreshReport()

     

            End With

     

            TLP.Controls.Add(rv, numéro_colonne, numéro_ligne)

     

        End Sub

     

        Sub SubreportProcessingEventHandler(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)

     

            Dim SubReport_FileName As String = "SubReport - Détail MP Non pulvérulente"

            Dim SubReport_connection As SqlCeConnection = connection_bdd_appli

     

            Dim SubReport_ReportingServices_DataSetName As String = "DataSet_SQL_Détail_MP_Non_pulvérulente_SubReport"

     

            Dim SubReport_Requête_SQL As String = "SELECT numero_mp, temperature, pression_vapeur, viscosite, vitesse_de_diffusion_dab"

     

            SubReport_Requête_SQL &= " FROM parametres_physico_chimiques_avancés"

            SubReport_Requête_SQL &= " WHERE numero_mp = " & numéro_mp

     

            Affiche_Sous_rapport(e, SubReport_FileName, SubReport_connection, SubReport_Requête_SQL, SubReport_ReportingServices_DataSetName)

     

        End Sub

     

        Sub Affiche_Sous_rapport(ByVal e As SubreportProcessingEventArgs, ByVal SubReport_FileName As String, ByVal SubReport_Connection As SqlCeConnection, ByVal SubReport_Requête_SQL As String, ByVal SubReport_ReportingServices_DataSetName As String)

     

            Dim report_file As String = variables.strings.CurrentUserApplicationData & "\Système\" & SubReport_FileName & ".rdlc"

     

            Dim sc As New SqlCeCommand(SubReport_Requête_SQL, SubReport_Connection)

            Dim sda As New SqlCeDataAdapter(sc)

     

            Dim rds As New ReportDataSource

            Dim ds As New Data.DataSet

     

            With sda

     

                .Fill(ds)

                .Dispose()

     

            End With

     

            With rds

     

                .Name = SubReport_ReportingServices_DataSetName

                .Value = ds.Tables(0)

     

            End With

     

            With e.DataSources

     

                .Clear()

                .Add(rds)

     

            End With

     

        End Sub

    Friday, June 24, 2011 8:05 AM
  • Bonjour,

     

    Je n’arrive pas à ouvrir un sous rapport dans mon rapport.

     

    Voici ma configuration :

    SQL Server 2008 R2 avec Reporting services

    SQL Server CE

    Visual Studio 2010 PRO (VB)

     
    Voici la façon dont je procède :
    1)    Je crée un rapport RDL et un sous-rapport RDL avec la BIDS
    2)    Je copie les fichiers RDL dans le répertoire de mon projet et je les renomme en RDLC
    3)    Dans le projet, j’ajoute un élément existant et je sélectionne les fichiers RDLC
    4)    J’ouvre les rapports RDLC et je les sauvegarde (conversion au format RDLC)
    5)    Je copie les fichiers RDLC convertis dans le répertoire où doivent être stockés les fichiers dans le but d’être utilisés dans mon application
    6)    Je ne crée pas de contrôle ReportViewer dans mon form, mais dans le code.
    7)    J’exécute mon projet, le rapport s’ouvre bien normalement, mais le sous-rapport affiche l’erreur : Echec de la récupération des données pour le sous-rapport, ‘SubReport_Détail_MP_Non_pulvérulente’, situé à l’emplacement suivant : C:\Users\Stéphane\AppDataRoaming\PWM\AU\1.0.0.0\Système\SubReport – Détail MP Non pulvérulente.rdlc. Pour plus d’informations, consultez les fichiers journaux.

    Pour information, je ne crée pas le rapport directement dans mon projet en RDLC car j’ai besoin des champs de plusieurs tables et je n’arrive pas à utiliser de requêtes pour la création du rapport RDLC. C’est pour cette raison que je crée d’abord le rapport au format RDL avec la BIDS que je converti ensuite dans mon projet.

    A noter qu’il n’y a pas de soucis pour l’accès aux différents fichiers, ni à la base de données SQL CE.

     

    Au sujet du code ci-dessus :

    Au chargement du formulaire, New est exécuté qui exécute Affiche_Rapport.

    Affiche_Rapport exécute à son tour Affiche_Rapport_et_Sous_rapport

    Affiche_Rapport_et_Sous_rapport affiche le rapport qui contient un sous-rapport et exécute ainsi l’événement SubReportProcessingEventHandler

    SubReportProcessingEventHandler exécute finalement Affiche_Sous_rapport

     

    PS : http://www.gotreportviewer.com ou autre site y compris google déjà consultés

     

    Merci d'avance pour votre aide,

    Stéphane

    Friday, June 24, 2011 8:05 AM
  • Up

     

    Hi,

     

    Is anybody can help me please ?

    I'm steel blocked :/

     

    Stéphane

     

    Monday, June 27, 2011 7:58 AM
  • I have this same issue, only in English
    • Marked as answer by Stéphane2009 Monday, July 4, 2011 12:07 PM
    • Unmarked as answer by Stéphane2009 Monday, July 4, 2011 12:07 PM
    Wednesday, June 29, 2011 3:24 PM
  • This problem is resolved

    Therefore, I don't know why and I don't understand why that work now and not before, but I don't care, the essential is that's work !

    • Marked as answer by Stéphane2009 Monday, July 4, 2011 12:07 PM
    Monday, July 4, 2011 12:07 PM