web-dev-qa-db-fra.com

La visionneuse de rapports ne se charge pas et affiche un espace vide - exécution de fichiers RDLC locaux

J'ai eu un problème avec les services de génération de rapports, en exécutant des fichiers rdlc locaux sur la version 2005. 

J'ai dans le HTML un visualiseur de rapport configuré pour s'exécuter localement comme suit: 

 <rsweb:ReportViewer ID="ReportingServicesReportViewer" runat="server" Height="100%"
            ProcessingMode="Local" ShowParameterPrompts="False" Width="100%">
        </rsweb:ReportViewer>

Dans le code

// create SqlConnection
        SqlConnection myConnection = new SqlConnection(ConnectionString);
        myCommand.Connection = myConnection;
        SqlDataAdapter da = new SqlDataAdapter(myCommand);

        //get the data
        DataSet data = new DataSet();
        da.Fill(data);

        if (data != null && data.Tables.Count > 0 && data.Tables[0].Rows.Count > 0)
        {
            ReportingServicesReportViewer.Visible = true;
            ltrStatus.Text = string.Empty;

            //provide local report information to viewer
            ReportingServicesReportViewer.LocalReport.ReportPath = Server.MapPath(Report.RDLCPath);

            //bind the report attributes and data to the reportviewer
            ReportDataSource rds = new ReportDataSource("DataSet1", data.Tables[0]);
            ReportingServicesReportViewer.LocalReport.DataSources.Clear();
            ReportingServicesReportViewer.LocalReport.DataSources.Add(rds);
            ReportingServicesReportViewer.LocalReport.Refresh();
        }
        else
        {
            ReportingServicesReportViewer.Visible = false;
            ltrStatus.Text = "No data to display.";
        }

Lorsque la méthode permettant de renseigner l'afficheur de rapport avec les résultats de celui-ci est exécutée, rien ne se passe comme si l'afficheur de rapport n'était même pas là.

Ce que j'ai fait pour résoudre les problèmes jusqu'à présent:

  • Vérifié l'observateur d'événements à la recherche d'erreurs et c'est la seule chose liée Que je reçois, [Domaine]\sp_dbadmin Reason: Impossible d'ouvrir la base de données explicitement spécifiée. . Cependant, Mon utilisateur auquel je me connecte est un administrateur système. J'ai vérifié cela et Suis sûr parce que j'ai vérifié les sys.server_role_members
  • J'ai essayé d'emprunter l'identité de l'utilisateur connecté, mais en vain
  • J'ai créé un utilisateur spécifique avec les droits sysadmin et attribué tous les droits d'accès à partir de IIS ainsi que sur le serveur SQL 2008.

Quelqu'un at-il rencontré un problème similaire à celui-ci, des idées?

10
Mez

Essayez d’utiliser un simple rapport, parfois reportviewer lève une exception provoquée par un RDLC non valide et affiche un rapport vide.

Essayez également de déboguer le projet et de regarder la fenêtre de sortie dans Visual Studio: vous verrez l'avertissement émis par le moteur RDL, il peut être utile de rechercher la raison de l'erreur.

8
Matteo Conta

J'ai eu le même problème avec VS2012, le rapport indique le chargement de l'image puis, une fois le chargement terminé, le rapport est vide. Les données existent mais ne sont pas rendues.

Solution: il suffit de changer Rapport Rendu Async sur Faux et le rapport fonctionne à nouveau correctement.

8
Beyhan

J'avais le même problème quand j'ajoutais un paramètre dans rdlc mais que je ne l'assignais pas. J'ai résolu en ajoutant ce code.

Dim p_Date As Microsoft.Reporting.WebForms.ReportParameter
p_Date = New Microsoft.Reporting.WebForms.ReportParameter("DATE", txtDate.Text)
    Me.ReportViewer1.LocalReport.SetParameters(New Microsoft.Reporting.WebForms.ReportParameter() {p_Date})
    ReportViewer1.LocalReport.Refresh()
7
user3567457

Dans mon cas, le contrôle ReportViewer ne fournit pas de messages d'erreur (corps du contrôle ReportViewer ou EventViewer), mais simplement une page vierge. Je pense que cela rend difficile trouver et résoudre le problème. La réponse de Yoel Halb était ma clé!

Une propriété appelée IsReadyForRendering était False. Dans le BOL fait référence à la rubrique paramètres.

Je pourrais inspecter chaque valeur de l'ensemble des paramètres avec le code (vous pouvez l'exécuter à partir de la fenêtre immédiate)

   var parameters = ReportViewer1.LocalReport.GetParameters()

Vous trouverez le paramètre problématique lorsque vous regarderez la propriété State avec la valeur "MissingValidValue"

J'espère que cela t'aides !

3
Fer R

J'ai eu le même problème et dans mon cas, il est apparu que j'avais fourni un jeu de données qui n'était pas le type d'objet attendu par le rapport.

Dans ma situation, le rapport attendait un objet métier, mais j'ai fourni une source de données SQL.

J'ai également rencontré ce même problème lorsqu'il y avait des paramètres dans le rapport qu'il n'était pas permis d'indiquer nuls ou vides, mais que les valeurs de paramètre n'étaient pas fournies.

Notez également que pour définir une source de données dans le code, cela doit être fait dans l'événement onload et non dans l'événement page_load. 

3
yoel halb

Celui-ci a pris du temps à comprendre, alors espérons que ces vérifications vous feront gagner du temps:

1) Vérifier le web.config

<system.web>
  <httpHandlers>
    <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" validate="false" />
  </httpHandlers>

  <buildProviders>
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 </buildProviders>
</system.web>

<system.webServer>
  <handlers>
    <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </handlers>
<system.webServer>

2) essayez le contrôle du visualiseur de rapport directement en mode Création avant de déplacer une configuration dans le code

Contrôle de la visionneuse de rapports codé en dur

3) Vérifiez que le gestionnaire de script se trouve sur la page précédant le visualiseur de rapports.

4) Assurez-vous que le rapport est exécuté en dehors de l'afficheur de conception, soit localement, soit sur le serveur SSRS.

5) ASSUREZ-VOUS QUE LE RAPPORT A DEFAUT LES VALEURS PAR DEFAUT POUR TOUS LES PARAMETRES! Les rapports qui nécessitent des paramètres et pour lesquels les valeurs par défaut ne sont pas vides.

2
user1479008

après avoir changé la taille du papier ou de Reportviewer ne fonctionnera pas, vous pouvez essayer ma solution en ajoutant un délai supplémentaire. 

WaitControlDisplayAfter

parfois, vos données sont trop volumineuses pour être traitées en mode asynchrone

Dans mon cas, le coupable avait des paramètres avec Autoriser valeur null = faux (décoché) ... Ne me demandez pas pourquoi.

1
Alfredo Papirriqui

J'ai passé plusieurs jours à résoudre un problème similaire. Peut-être que cela pourrait aider quelqu'un. J'ai lu presque tous les sujets sur stackoverflow, mais lire des commentaires ici m'a fait essayer cela. Dans mon cas, les deux premières lignes (paramètres row et row avec possibilité de masquer les paramètres) étaient affichées, mais les lignes contenant des boutons de gestion et le rapport lui-même étaient vides. Cliquer sur View report n'a entraîné aucune action.

 preview of auto generated HTML  web page

Ce que j'ai fait a été de charger le rapport contenant des paramètres sans les fournir (je voulais que l'utilisateur les remplisse) sur Page_Load.

protected void Page_Load( object sender, EventArgs e )
{
    this.LoadReport();
}

private void LoadReport()
{
        // retrieve path param from "Reports/{path}" URL
        string reportPath = Request.QueryString[ "path" ] as string;
        string reportServerUrl = System.Configuration.ConfigurationManager.AppSettings[ "ReportServerUrl" ];

        this.MainReport.ProcessingMode = ProcessingMode.Remote;
        this.MainReport.ServerReport.ReportServerUrl = new Uri( reportServerUrl );
        this.MainReport.ServerReport.ReportPath = reportPath;
        this.MainReport.ServerReport.Refresh();
}

Après avoir remplacé le code Page_Load par celui indiqué ci-dessous, tout fonctionne correctement.

protected void Page_Load( object sender, EventArgs e )
{
    if ( !this.IsPostBack )
        this.LoadReport();
}
0
Ryfcia

Avait le même problème. Il m'a fallu un certain temps pour comprendre, mais il s'avère que j'ai accidentellement modifié le contrôle reportViewer moi-même. J'ai donc perdu ce que Visual Studio Designer avait créé pour moi lors de la conception du formulaire. C'est pourquoi le contrôle reportviewer est resté vide - Je n'ai jamais défini de propriétés sur l'objet ReportViewer de Visual Studio Designer. 

Silly erreur, mais a pris un certain temps pour comprendre. 

0
Denis