2009-08-28 16 views
5

He escrito un programa C# utilizando VS 2008 que usa el visor de informes incorporado y procesa los informes localmente.Actualizar y actualizar el Visor de informes basado en el nuevo archivo RDLC

Cuando se está viendo el informe, deseo reemplazar el archivo rdlc actual por uno nuevo y actualizar el informe sin cerrar el formulario de informe que contiene el visor de informes.

Ya he comprobado que el archivo se está generando correctamente. Si cierro el formulario con el visor de informes y lo abro, aparece la información del nuevo archivo. Simplemente no puedo entender cómo volver a cargar el visor de informes sin cerrar el formulario principal.

A continuación se muestra lo que ya probé. No recibo mensajes de error El informe parece actualizarse, pero realmente solo me muestra lo que ya estaba viendo. El nuevo archivo RDLC no está cargado.

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

Respuesta

10

Intente llamar a ReportViewer.Reset() antes de cargar el nuevo archivo de informe.

Actualmente estoy haciendo exactamente esto en mi control ReportViewer, sin embargo, el código fuente está en funcionamiento. Si el restablecimiento no funciona, publicaré mi código aquí el lunes por la mañana. Definitivamente se puede hacer.

+0

Esto funcionó muy bien. Muchísimas gracias por la ayuda. Muy apreciado. Acabo de agregar: this.ReportViewer.Reset(); después de mi código "generar nuevo archivo" y antes de mi código de conexión sql. Esto fue perfecto gracias. J –

+0

Tuve el mismo problema para los informes remotos. Esta respuesta todavía se aplica. ¡Gracias! – LOAS

Cuestiones relacionadas