2009-08-28 8 views
5

J'ai écrit un programme C# en utilisant VS 2008 qui utilise la visionneuse de rapports intégrée et traite les rapports localement.Actualiser et actualiser la visionneuse de rapports basée sur le nouveau fichier RDLC

Lorsque le rapport est en cours d'affichage, je souhaite remplacer le fichier rdlc actuel par un nouveau et actualiser le rapport sans fermer le formulaire de rapport qui contient le visualiseur de rapports.

J'ai déjà vérifié pour m'assurer que le fichier est généré correctement. Si je ferme le formulaire avec la visionneuse de rapports et l'ouvre en arrière, les informations sur le nouveau fichier s'affichent. Je ne peux pas comprendre comment recharger le visualiseur de rapports sans fermer le formulaire parent.

Voici ce que j'ai déjà essayé. Je reçois aucun message d'erreur. Le rapport semble se rafraîchir, mais cela me montre vraiment ce que je regardais déjà. Le nouveau fichier RDLC n'est pas chargé.

private void BtnRefreshRpt_Click(object sender, EventArgs e) 
    { 

     try 
     { 

      GenerateNewRDLC GN = new GenerateNewRDLC(); 
      GN.generateFile(); /*this part definitely works*/ 


      SqlConnection conReport = new SqlConnection  (ConfigurationManager.ConnectionStrings["Connection String Info"].ConnectionString); 
      SqlCommand cmdReport = new SqlCommand(); 
      SqlDataReader drReport; 
      DataSet dsReport = new AdvEdgeDataSet(); 

      conReport.Open(); 

      cmdReport.CommandType = CommandType.Text; 
      cmdReport.Connection = conReport; 
      cmdReport.CommandText = strRptCriteria; 

      drReport = cmdReport.ExecuteReader(); 

      dsReport.Tables[0].Load(drReport); 

      drReport.Close(); 
      conReport.Close(); 

      reportViewer1.LocalReport.ReportPath = strRptResource.ToString(); 


      ReportDataSource rds = new ReportDataSource(); 
      rds.Name = strRptDataSource; 
      rds.Value = dsReport.Tables[0]; 
      reportViewer1.LocalReport.DataSources.Add(rds); 
      reportViewer1.RefreshReport(); 
      reportViewer1.SetDisplayMode(DisplayMode.PrintLayout); 

      //this.reportViewer1.RefreshReport(); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

Répondre

10

Essayez d'appeler ReportViewer.Reset() avant de charger le nouveau fichier de rapport.

Je fais actuellement exactement cela dans mon contrôle ReportViewer, cependant, le code source est au travail. Si la réinitialisation ne fonctionne pas, je posterai mon code ici lundi matin. Cela peut certainement être fait.

+0

Cela a fonctionné très bien. Merci beaucoup pour l'aide. Très apprécié. Je viens d'ajouter: this.ReportViewer.Reset(); après mon code "générer un nouveau fichier" et avant mon code de connexion SQL. C'était parfait merci. J –

+0

J'ai eu le même problème pour les rapports à distance. Cette réponse est toujours appliquée. Merci! – LOAS