locked
Problema para que se visualicen valores de TextBox en Reporte de Report Viewer RRS feed

  • Pregunta

  • Hola

    Tengo un reporte hecho en report viewer.

    La mayor parte de la información la plasmo por medio de un procedimiento almacenado, hasta aquí todo bien.

    Uno de las necesidades es mostrar el valor de dos TextBox donde previamente el usuario capturó un rango de fechas, esto para que se pueda apreciar qué día inicia y qué día finaliza la información plasmada, más sin embargo no logro que estos datos se muestren en el reporte, agradecería pudieran ver mi código para decirme qué parte está incorrecta.

    Para poder mostrar en el reporte los valores capturados inicialmente hice una clase llamada 'Parametros' que contiene lo siguiente:

    Imports System.Collections.Generic

    Public Class Parametros

        Public Property Desde() As DateTime
        Public Property Hasta() As DateTime

    End Class

    Posteriormente en el .rdlc agregué un DataSet que contiene los campos de la clase (Desde y Hasta); dichos valores los asocié como expresiones a unas cajas de texto dentro del diseño de mi reporte, quedando algo así en cada una:

    =First(Fields!Desde.Value, "DataSet2")
    =First(Fields!Hasta.Value, "DataSet2")

    Posteriormente en el evento Load del formulario donde tengo cargado el reporte.rdlc, tengo lo siguiente:

    Public Class frmRep
        Public Invoice As New List(Of Parametros)()  'Creo una lista para pasar los campos de la clase
       
        Private Sub frmRep_Load(sender As Object, e As EventArgs) Handles MyBase.Load
           

       ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet2", Invoice)) 'Se indica que el DataSet2 es el DataSource del reporte

        End Sub

        Private Sub TraerRangoFechas()  'Función donde igualo los campos de la clase con los TextBox donde el usuario captura rango de fechas

            'Realizo una instancia de la clase Parametros
            Dim invoice As New Parametros() 'El nombre de Parametros es la clase
            invoice.Desde = DateValue(Me.TextBox2.Text) ' TextBox2=Fecha Inicial
            invoice.Hasta = DateValue(Me.TextBox3.Text) 'TextBox3=Fecha Final

            Dim inst As New frmRep()  'Creo una instancia del formulario donde se encuentra el reporte
           
            inst.Invoice.Add(invoice) 'Le paso la instancia de la clase a la lista Invoice
            inst.Show()

        End Sub

       'Código del botón ImprimirReporte
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            TraerRangoFechas()
            'En este espacio tengo el nombre del procedimiento almacenado con los parámetros que requiere para mostrar la     información, esto funciona bien.
            Me.ReportViewer1.RefreshReport()

        End Sub

    End Class

    Al ejecutar el reporte no me marca ningún error, la información que trae el procedimiento almacenado se muestra como debe ser, pero los espacios del rango de fechas (Desde y Hasta) se muestran en blanco, alguna sugerencia u observación de lo que estoy haciendo mal?

    Desde ya muchas gracias.

    martes, 5 de diciembre de 2017 0:00

Respuestas

  • Aunque en teoria deberia funcionar con el List(Of Parametros), yo siempre lo he visto hacer pasando un DataTable al report. Prueba a usar en lugar del List un DataTable que tenga dos columnas llamadas Desde y Hasta, a ver si asi funciona.

    Otra opcion que se me ocurre es cargar los textboxes con =Parameters!Desde.Value y lo mismo con Hasta, y pasarle los dos valores a traves de la coleccion Parameters del LocalReport, en lugar de usar los DataSources. Logicamente, tendras que definir los parametros en el informe, igual que tienes que definir el datasource cuando usas un datasource para pasar los datos.

    • Propuesto como respuesta Pablo RubioModerator miércoles, 6 de diciembre de 2017 19:30
    • Marcado como respuesta Zarpis jueves, 7 de diciembre de 2017 23:22
    miércoles, 6 de diciembre de 2017 16:52
  • Usando parámetros no tuve mayor problema para mostrar la información. De momento los emplearé de esta forma hasta que logre resolver lo de la clase.

    Comparto mi código por si a alguien le sirviera:

    'En el diseño del .rdlc agregué dos parametros (ParametroDesde y ParametroHasta)

    'En el formulario donde está cargado el RV agregué lo siguiente:

    'En este caso estoy tomando los valores de los parámetros a partir de los text box del formulario

    Imports Microsoft.Reporting.WinForms

    Private Sub Reporte_Load(sender As Object, e As EventArgs) Handles MyBase.Load

     Dim parameters(1) As ReportParameter
            parameters(0) = New ReportParameter("ParametroDesde", Formulario.Desde.Text)
            parameters(1) = New ReportParameter("ParametroHasta", Formulario.Hasta.Text)
            ReportViewer1.LocalReport.SetParameters(parameters)
            Me.ReportViewer1.RefreshReport()

    End Sub

    Gracias por las sugerencias, saludos.

    • Propuesto como respuesta Pablo RubioModerator miércoles, 6 de diciembre de 2017 19:30
    • Marcado como respuesta Zarpis jueves, 7 de diciembre de 2017 23:22
    miércoles, 6 de diciembre de 2017 18:51

Todas las respuestas

  • Asi a ojo tiene buena pinta. En principio, deberia funcionar tal como lo tienes. Si no funciona, indica que se esta escapando algo que no es obvio a simple vista. Utiliza el debugger y pon un punto de ruptura justo en el punto en el que muestras el reporte, y examina sus datasources a ver si le estan llegando correctamente los valores que esperabas.
    martes, 5 de diciembre de 2017 9:06
  • Agradezco tu respuesta, hice lo que me sugeriste y comprobé que al datasource sí le llega la información pero simplemente no la muestra en los TextBox del reporte, sigo atorado con esto. Agradecería mucho su ayuda.

    miércoles, 6 de diciembre de 2017 15:30
  • Aunque en teoria deberia funcionar con el List(Of Parametros), yo siempre lo he visto hacer pasando un DataTable al report. Prueba a usar en lugar del List un DataTable que tenga dos columnas llamadas Desde y Hasta, a ver si asi funciona.

    Otra opcion que se me ocurre es cargar los textboxes con =Parameters!Desde.Value y lo mismo con Hasta, y pasarle los dos valores a traves de la coleccion Parameters del LocalReport, en lugar de usar los DataSources. Logicamente, tendras que definir los parametros en el informe, igual que tienes que definir el datasource cuando usas un datasource para pasar los datos.

    • Propuesto como respuesta Pablo RubioModerator miércoles, 6 de diciembre de 2017 19:30
    • Marcado como respuesta Zarpis jueves, 7 de diciembre de 2017 23:22
    miércoles, 6 de diciembre de 2017 16:52
  • Voy a probar usando parametros y te cuento cómo me fue. Muchas gracias.

    miércoles, 6 de diciembre de 2017 17:21
  • Usando parámetros no tuve mayor problema para mostrar la información. De momento los emplearé de esta forma hasta que logre resolver lo de la clase.

    Comparto mi código por si a alguien le sirviera:

    'En el diseño del .rdlc agregué dos parametros (ParametroDesde y ParametroHasta)

    'En el formulario donde está cargado el RV agregué lo siguiente:

    'En este caso estoy tomando los valores de los parámetros a partir de los text box del formulario

    Imports Microsoft.Reporting.WinForms

    Private Sub Reporte_Load(sender As Object, e As EventArgs) Handles MyBase.Load

     Dim parameters(1) As ReportParameter
            parameters(0) = New ReportParameter("ParametroDesde", Formulario.Desde.Text)
            parameters(1) = New ReportParameter("ParametroHasta", Formulario.Hasta.Text)
            ReportViewer1.LocalReport.SetParameters(parameters)
            Me.ReportViewer1.RefreshReport()

    End Sub

    Gracias por las sugerencias, saludos.

    • Propuesto como respuesta Pablo RubioModerator miércoles, 6 de diciembre de 2017 19:30
    • Marcado como respuesta Zarpis jueves, 7 de diciembre de 2017 23:22
    miércoles, 6 de diciembre de 2017 18:51
  • Hola Zarpis

    Con base a tu consulta, para que las soluciones brindadas por los colaboradores del foro puedan ser útiles para el resto de la comunidad, favor de marcarlas.

    Saludos Cordiales

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 6 de diciembre de 2017 21:43
    Moderador