none
Generar Caratula de informe en otra aplicación de informe (.rdlc) RRS feed

  • Pregunta

  • Buenas gente, estoy precisando realizar una caratula (rdlc) separada del detalle del reporte.
    Pense en realizar 2 reportes de aplicacion por medio de Constructores, pasarle al report la caratula (ReportViewer) para renderizarla, pero luego para juntarlas no estoy encontrando otra forma mas que unir los archivos pdf por medio de ITextSharp (.dll).

    Tienen alguna otra idea de como puedo unir en la primera pagina la Caratula y en las siguientes el detalle del Reporte?

    Muchas Gracias!!

    lunes, 25 de febrero de 2019 14:19

Todas las respuestas

  • Se me ocurren dos formas de hacerlo.

    Una es crear un tercer informe que dentro tenga unicamente dos subinformes que sean la caratula y el informe "real". Al subinforme le puedes pasar un parametro para configurar cual es el informe que tiene que cargar en su interior, cosa que te permite cambiar la caratula.

    Otra opcion es usar C# para abrir los dos ficheros .rdlc (el de la caratula y el del informe). Por dentro son puro XML. Entondes usas las funciones de manipulacion de XML para combinar los dos en uno. Primero tendras que hacer un ejemplo combinandolos a mano y ver cual es el XML que te genera. Despues usas un XmlDocument u otra clase similar para combinar tus dos ficheros en la misma manera.



    lunes, 25 de febrero de 2019 14:48
    Moderador
  • Buenas Alberto!

    Me parece viable la primera opción! El tema es que no se como logra cargar y realizar la llamada al SubreporProcessing, ya que estoy haciendo algo similar para el Encabezado pero aun no pude resolverlo (Te dejo el Caso que abrí).

    Si me ayudas podría matar 2 pajaros de 1 tiro!!

    Slds.

    lunes, 25 de febrero de 2019 15:38
  • hola

    Un subreporte no te sirve ?

    Subinformes (Generador de informes y SSRS)

    al de captura la asignas el subreporte de detalle

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 25 de febrero de 2019 15:41
  • Buenas Leandro!

    Intente hacerlo con el "Encabezado" y me arroja el error:

    "El subinforme 'Encabezado' no se pudo encontrar en la ubicación especificada RUTA\ Encabezado.rdlc Verifique que el subinforme se haya publicado y que el nombre sea correcto".

    Esta bien la llamada al evento "AgregarEncabezado"?

    ReportDataSource dataSource = new ReportDataSource(nombreSP, ds.Tables[0]);
    this.reportViewer1.LocalReport.DataSources.Clear();
    this.reportViewer1.ProcessingMode = ProcessingMode.Local;
    string rutaEncabezado = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\BCSLDSPT\\Encabezado.rdlc";
    string rutaRDLC = @"D:\\BASCS-ReportingServices\\BAS-ReportingServices\\BCSLDSPT\\Report1.rdlc";
    Stream subReport = File.OpenRead(rutaEncabezado);
    Stream report = File.OpenRead(rutaRDLC);            
    this.reportViewer1.LocalReport.LoadReportDefinition(report);
    this.reportViewer1.LocalReport.LoadSubreportDefinition("Encabezado", subReport);
    this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(AgregarEncabezado);                                                                     
    this.reportViewer1.LocalReport.DataSources.Add(dataSource);
    this.reportViewer1.RefreshReport();
    
    void AgregarEncabezado(object sender, SubreportProcessingEventArgs e)
        {
            string Parametros = "1, 1, NULL, 1";            
            string cadenaConexion = "Data Source=SRVDESARROLLO7\\BASCS; Initial Catalog=bascsreport ;User Id=sa; Password=sa";
            string cadenaComandoSQL = frmListClass.SeteosSQL + frmListClass.SP_Encabezado + " " + Parametros;
    
            SqlConnection ConexionSQL = new SqlConnection(cadenaConexion);
            ConexionSQL.Open();
            SqlCommand ComandoSQL = new SqlCommand(cadenaComandoSQL, ConexionSQL);
            ComandoSQL.CommandType = CommandType.Text;
            ComandoSQL.Parameters.AddWithValue("@monoemp, @codempusu, @tituloinf, @whereemp", Parametros);
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = ComandoSQL;
            DataSet dsEncabezado = new DataSet();
            da.Fill(dsEncabezado, Parametros);
            ConexionSQL.Close();
    
            ReportDataSource dataSourceEncabezado = new ReportDataSource("XXX_SP_REPORTING_PARAMETROS_EMP", dsEncabezado.Tables[0]);
            e.DataSources.Add(dataSourceEncabezado);
    
        }

    Dentro del diseño del reporte (rdlc), en las propiedades del subinforme al "Nombre:" y "Usar este informe como subinforme:" estoy asignandole "Header" sin especificar ningun Path de ruta. Esta bien como lo configure?



    lunes, 25 de febrero de 2019 16:27