visualizar un report que contiene subinformes con Reportviewer

tema enviado por mari90 en C#
tema iniciado el 29/10/2008

Hola a todos!!

Necesito visualizar un informe en un formulario windows. Estoy utilizando visual studio 2008 y C#. Para los informes utilizo (microsft sql server)Reporting Services. Estoy trabajando con informes locales.

Para mostrar el informe en un windows form utilizo el control de reportviewer de .NET.

El informe contiene subinformes. El informe principal tiene dos parámetros y cada subinforme también tiene parámetros de consulta. El informe principal le asigna valor al parámetro del subinforme contenido en dicho informe principal. El subinfome a su vez,le pasa valor al parámetro de consulta del siguiente subinforme y así sucesivamente.

El reportviewer me muestra correctamente un informe que no tenga subinformes. Pero en cuanto le meto los subinformes me da el siguiente error:

some parameters or credentials have not been specified.

A continuación muestro algo del código que estoy utilizando:

private void frmMostrarInformes_Load(object sender, EventArgs e)

        {

            this.reportViewer1.ProcessingMode = ProcessingMode.Local;

 //la siguiente línea ejecuta el método que trata los subinformes

            reportViewer1.LocalReport.SubreportProcessing +=

                    new SubreportProcessingEventHandler(ManejadorSubreportProcessing);

            this.reportViewer1.RefreshReport();

 

        this.reportViewer1.LocalReport.ReportEmbeddedResource = "path del informe principal.rdlc";

              //obtengo los parámetros del informe principal              

                ReportParameterInfoCollection parametros = this.reportViewer1.LocalReport.GetParameters();

                                  //Añado los parámetros al ReportViewer

                    this.reportViewer1.LocalReport.SetParameters(_listParametros);

                    reportViewer1.LocalReport.DataSources.Add(new ReportDataSource (strNombreDs, oDs.Tables[0]));                  

                    this.reportViewer1.RefreshReport();

                  

            }

//el problema viene ál tratar los subinformes:

void ManejadorSubreportProcessing(object sender, SubreportProcessingEventArgs e)

        {

            ...

            switch(e.ReportPath )

            {

                case "SubReport1":

                   ((LocalReport)sender).ReportEmbeddedResource = "path del SubReport1.rdlc";

                    parameters = e.Parameters;

                    string strValorParam = e.Parameters[0].Values[0].ToString();

                    //if the subreport has parameters

                    if (parameters != null && parameters.Count != 0)

                    {

                        _listParametros1 = new List<ReportParameter>();

                       _listParametros1.Add(new ReportParameter("RutaNivelId", e.Parameters[0].Values[0].ToString(), false));

                        ((LocalReport)sender).SetParameters(_listParametros1);

                       

                        ((LocalReport)sender).SetParameters(_listParametros1);

                        clsGeneral.BaseDatos.LlamarSqlRetornaDataSet(@"SELECT *,M_OPERACION.operacion_nme + ':' +isnull(M_OPERACION.operacion_dsc,'') as operacion

FROM RUTA_OPERACION left join M_OPERACION ON RUTA_OPERACION.operacion_id=M_OPERACION.operacion_id

WHERE ruta_nivel_id="+strValorParam +

"order by fase", oDs, out oDa);

                       

                        e.DataSources.Add(new ReportDataSource(strNombreDs, oDs.Tables[0]));

                       

                    return;

                    break;

 

                case "SubReport2":

//se trabaja de la misma forma que en el subreport anterior

                                        return;

                    break;

        }

 

No sé cómo tratar los subinformes... espero que alguien pueda ayudarme.

 

Gracias.