Principales respuestas
Problema para que se visualicen valores de TextBox en Reporte de Report Viewer

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.
- Propuesto como respuesta Pablo RubioModerator martes, 5 de diciembre de 2017 16:09
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:43Moderador