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.