none
RDLC - Parámetros con el método SetParameters RRS feed

  • Pregunta

  • Buenas tardes,

    En un report "RDLC" (aplicación de escritorio C# de V. Studio 2005) tengo definido un parámetro de tipo entero, por ejemplo "pImporte" (definido desde el propio informe, en el Menú "Informe" > "Parámetros del Informe"). Pues bien, a la hora de ejecutar el report en el control ReportViewer, le intento pasar dicho parámetro de la siguiente forma:

     

    this.reportViewer1.Visible = true;
    ReportParameter P = new ReportParameter("IDFactura", ">1000", false);
    this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { P });
    reportViewer1.Refresh();


    Pero en ".SetParameters(new ReportParameter[] { P }); " me da el siguiente error:

    Excepción no controlada del tipo 'Microsoft.Reporting.WinForms.LocalProcessingException' en Microsoft.ReportViewer.WinForms.dll
    Información adicional: Se ha producido un error durante el procesamiento local de informes.

    ¿Alguien sabe como puedo corregir este error para poder pasar parámetros al Report?

    Muchas gracias.

    Un saludo.

    martes, 24 de noviembre de 2009 17:41

Respuestas

  • Hola Leandro,

    Muchas gracias. Pero creo que esta solución no me sirve, porque lo que yo necesito es aprovechar un mismo ReportViewer para visualizar varios informes, o bien el mismo informe filtrando sus datos, debido a que el usuario en tiempo de ejecución tendrá unas TextBox en el Formulario donde introducirá filtros, que yo debo añadir a la cláusula WHERE del DataSet del Report, y por tanto reconstruir en informe dinámicamente cada vez que el usuario genere un filtro. 

    Además, el ejemplo del 1º enlace que me has mandado lo he hecho, y no me funciona, el reportViewer se queda en blanco (so se si tiene algo que ver el que el ejemplo sea para un webForm y en mi caso sea un WinForm). 
    Para que muestre los datos tengo que asignar en tiempo de diseño el informe ".rdlc" al ReportViewer, y así al ejecutar funciona correctamente, el problema es que cuando un usuario mete un filtro no puedo acceder a la consulta SQL del Informe por código.

    ¿Alguien sabe como puedo acceder a la SQL del DataSet del report para hacerle modificaciones dinámicamente?

    Muchas gracias.

    Un saludo.


    Puedes crear el dataset dinamicamente como te comento Leandro, incluyendo el where que desees.
    Luego ese DataSet se lo asignas al reporte.

    Por ejemplo si tu reporte tiene un filtro por fechas

    SELECT * FROM TABLE
    BETWEEN campo1 AND campo2

    Creas un método que llene ese DataSet con tu consulta, pasando como parámetros los filtros que desees, ese resultado se lo asignas al reporte.

    DataTable dt = new DataTable();
                dt.Clear();
                dt = MetodoDondeTraeslosDatos;
                reportViewer1.Clear();
                reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.BorderStyle = System.Windows.Forms.BorderStyle.None;
                reportViewer1.LocalReport.ReportPath = Directory.GetCurrentDirectory() + @"\Reports\_nombreReporte.rdl";
                reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
                reportViewer1.RefreshReport();

    Ahora si quieres pasarle el parámetro

    ReportParameter param = new ReportParameter(); param.Name = nombre; param.Values.Add(valor);

    report.SetParameters(param);


    Igual me parece mucho mas practico trabajar el filtro en el origen de datos, como te propuso Leandro.

    Sdos


    Martín Fabregues
    Córdoba, Argentina

    martes, 13 de mayo de 2014 1:12
  • hola

    si usas un reporte en modo local o sea un rdlc, no necesitas enviar parametros de filtro al reporte y que segurametne usaras un dataset tipado como origen de datos del reporte

    entonces lo que deberias hacer es filtrar directamente en la query que suas para cargar los datos del dataset y eso es todo

    How to create local reports RDLC featuring barcode images in ASP.NET
    CodeProject: Using the ASP.NET 2.0 ReportViewer in Local Mode
    Using SQL Server Reporting Services in Client   Mode

    si filtras el dataset y lo asignas al reprote no necesitas enviar un parametro de filtro

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 24 de noviembre de 2009 18:10

Todas las respuestas

  • hola

    si usas un reporte en modo local o sea un rdlc, no necesitas enviar parametros de filtro al reporte y que segurametne usaras un dataset tipado como origen de datos del reporte

    entonces lo que deberias hacer es filtrar directamente en la query que suas para cargar los datos del dataset y eso es todo

    How to create local reports RDLC featuring barcode images in ASP.NET
    CodeProject: Using the ASP.NET 2.0 ReportViewer in Local Mode
    Using SQL Server Reporting Services in Client   Mode

    si filtras el dataset y lo asignas al reprote no necesitas enviar un parametro de filtro

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 24 de noviembre de 2009 18:10
  • Hola Leandro,

    Muchas gracias. Pero creo que esta solución no me sirve, porque lo que yo necesito es aprovechar un mismo ReportViewer para visualizar varios informes, o bien el mismo informe filtrando sus datos, debido a que el usuario en tiempo de ejecución tendrá unas TextBox en el Formulario donde introducirá filtros, que yo debo añadir a la cláusula WHERE del DataSet del Report, y por tanto reconstruir en informe dinámicamente cada vez que el usuario genere un filtro. 

    Además, el ejemplo del 1º enlace que me has mandado lo he hecho, y no me funciona, el reportViewer se queda en blanco (so se si tiene algo que ver el que el ejemplo sea para un webForm y en mi caso sea un WinForm). 
    Para que muestre los datos tengo que asignar en tiempo de diseño el informe ".rdlc" al ReportViewer, y así al ejecutar funciona correctamente, el problema es que cuando un usuario mete un filtro no puedo acceder a la consulta SQL del Informe por código.

    ¿Alguien sabe como puedo acceder a la SQL del DataSet del report para hacerle modificaciones dinámicamente?

    Muchas gracias.

    Un saludo.


    miércoles, 25 de noviembre de 2009 12:57
  • Por favor, ¿Alguien sabe como puedo acceder a la SQL del DataSet (o DataTable del DataSet) del report para hacerle modificaciones dinámicamente?

    Me parece algo muy habitual... me extraña mucho que no haya formas de hacerlo...

    Muchas gracias.

    Un saludo.
    lunes, 30 de noviembre de 2009 16:10
  • Todavía ninguna solución? Yo también necesito solucionar el mismo problema, o similar al menos...
    lunes, 12 de mayo de 2014 22:53
  • Hola Leandro,

    Muchas gracias. Pero creo que esta solución no me sirve, porque lo que yo necesito es aprovechar un mismo ReportViewer para visualizar varios informes, o bien el mismo informe filtrando sus datos, debido a que el usuario en tiempo de ejecución tendrá unas TextBox en el Formulario donde introducirá filtros, que yo debo añadir a la cláusula WHERE del DataSet del Report, y por tanto reconstruir en informe dinámicamente cada vez que el usuario genere un filtro. 

    Además, el ejemplo del 1º enlace que me has mandado lo he hecho, y no me funciona, el reportViewer se queda en blanco (so se si tiene algo que ver el que el ejemplo sea para un webForm y en mi caso sea un WinForm). 
    Para que muestre los datos tengo que asignar en tiempo de diseño el informe ".rdlc" al ReportViewer, y así al ejecutar funciona correctamente, el problema es que cuando un usuario mete un filtro no puedo acceder a la consulta SQL del Informe por código.

    ¿Alguien sabe como puedo acceder a la SQL del DataSet del report para hacerle modificaciones dinámicamente?

    Muchas gracias.

    Un saludo.


    Puedes crear el dataset dinamicamente como te comento Leandro, incluyendo el where que desees.
    Luego ese DataSet se lo asignas al reporte.

    Por ejemplo si tu reporte tiene un filtro por fechas

    SELECT * FROM TABLE
    BETWEEN campo1 AND campo2

    Creas un método que llene ese DataSet con tu consulta, pasando como parámetros los filtros que desees, ese resultado se lo asignas al reporte.

    DataTable dt = new DataTable();
                dt.Clear();
                dt = MetodoDondeTraeslosDatos;
                reportViewer1.Clear();
                reportViewer1.LocalReport.DataSources.Clear();
                reportViewer1.BorderStyle = System.Windows.Forms.BorderStyle.None;
                reportViewer1.LocalReport.ReportPath = Directory.GetCurrentDirectory() + @"\Reports\_nombreReporte.rdl";
                reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt));
                reportViewer1.RefreshReport();

    Ahora si quieres pasarle el parámetro

    ReportParameter param = new ReportParameter(); param.Name = nombre; param.Values.Add(valor);

    report.SetParameters(param);


    Igual me parece mucho mas practico trabajar el filtro en el origen de datos, como te propuso Leandro.

    Sdos


    Martín Fabregues
    Córdoba, Argentina

    martes, 13 de mayo de 2014 1:12