locked
Utilización dinámica de ReportViewer RRS feed

  • Pregunta

  •  

    Hola,
    Estoy realizando una aplicación en la que necesito imprimir varios informes, que proceden de varias consultas de un mismo DataSet. Cada consulta tiene su propio TableAdapter.
    Tengo un formulario con un control ReportViewer (que no Crystal Reports) el cual utilizo como visor para todos los informes que quiero mostrar.
    Me gustaría poder asignar el informe dinámicamente, mediante código, según el que necesite mostrar pero no lo consigo. Si alguien sabe cómo se hace o tiene algún ejemplo, me haría un favor explicándomelo.
    Gracias
    • Cambiado Fran DiazModerator jueves, 21 de mayo de 2009 17:25 Reporting ([Loc]From:Lenguaje VB.NET)
    domingo, 14 de diciembre de 2008 21:45

Respuestas

  • Prueba a generar el reportviewer por código para cada impreso que quieras generar.

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    'Llenamos el dataset con la consulta que queramos

    Me.productosTableAdapter.Fill(productosDS.productos)

    'Nueva instancia del visor de informes

    Me.ReportViewer1 = New Microsoft.Reporting.WinForms.ReportViewer

    'Asignamos la propiedad dock para que el visor complete todo el formulario

    Me.ReportViewer1.Dock = System.Windows.Forms.DockStyle.Fill

    'T¡tulo del formulario

    Me.Text = "Report 1"

    'Tamano del formulario

    Me.ClientSize = New System.Drawing.Size(700, 600)

    'Tipo de procesamiento del visor

    Me.ReportViewer1.ProcessingMode = ProcessingMode.Local

    'A¤adimos la fuente de datos como origen de datos para el visor

    Me.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("productosDS_productos", productosDS.productos))

    'Origen del informe a mostrar

    Me.ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"

    'Tambien puede ser una ruta.... Me.ReportViewer1.LocalReport.ReportPath=My.Application.Info.DirectoryPath & "\report1.rdlc"

    'A¤adirmos el visor al formulario

    Me.Controls.Add(ReportViewer1)

    'Actualizamos el contenido del visor

    Me.ReportViewer1.RefreshReport()

    End Sub

     

    Salu2

     

    Si la respuesta te sirvió de ayuda recuerda marcarla como correcta.

    lunes, 15 de diciembre de 2008 1:38

Todas las respuestas

  • Prueba a generar el reportviewer por código para cada impreso que quieras generar.

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    'Llenamos el dataset con la consulta que queramos

    Me.productosTableAdapter.Fill(productosDS.productos)

    'Nueva instancia del visor de informes

    Me.ReportViewer1 = New Microsoft.Reporting.WinForms.ReportViewer

    'Asignamos la propiedad dock para que el visor complete todo el formulario

    Me.ReportViewer1.Dock = System.Windows.Forms.DockStyle.Fill

    'T¡tulo del formulario

    Me.Text = "Report 1"

    'Tamano del formulario

    Me.ClientSize = New System.Drawing.Size(700, 600)

    'Tipo de procesamiento del visor

    Me.ReportViewer1.ProcessingMode = ProcessingMode.Local

    'A¤adimos la fuente de datos como origen de datos para el visor

    Me.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("productosDS_productos", productosDS.productos))

    'Origen del informe a mostrar

    Me.ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"

    'Tambien puede ser una ruta.... Me.ReportViewer1.LocalReport.ReportPath=My.Application.Info.DirectoryPath & "\report1.rdlc"

    'A¤adirmos el visor al formulario

    Me.Controls.Add(ReportViewer1)

    'Actualizamos el contenido del visor

    Me.ReportViewer1.RefreshReport()

    End Sub

     

    Salu2

     

    Si la respuesta te sirvió de ayuda recuerda marcarla como correcta.

    lunes, 15 de diciembre de 2008 1:38
  • Gracias,

    Me has solucionado en 5 minutos lo que no he conseguido en 1 semana.

     

     

    lunes, 15 de diciembre de 2008 19:42
  • Buenas;

    Tengo un problema al momento de integrar un reporte.
    El caso es el siguiente. He diseñado un informe de estilo matriz y otro de estilo tabla.

    He realizado todo lo que he encontrado en cuanto foro y el resultado es el mismo "Error: no se puede mostrar el informe integrado"

    El codigo que cree es de la siguiente manera...
    ------------------------------------------------------

    Imports Microsoft.Reporting.WebForms
    Partial Public Class Informe
        Inherits System.Web.UI.Page
        Dim dtInforme As DataTable = Nothing
        Public Sub LocalReport_SubreportProcessing(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)
            Try
                'Dim ds As New dsMatriz
                'If dtInforme Is Nothing Then
                '    dtInforme = ds.Tables("dsBolsa")
                'End If
                'e.DataSources.Add(New ReportDataSource("DataSet1_OrderDetails", dtInforme))

                Dim ObjectDataSource2 As New ObjectDataSource("Report.Part1.DataSet2TableAdapters.Order_DetailsTableAdapter", "GetData")
                e.DataSources.Add(New ReportDataSource("DataSet2_Order_Details", ObjectDataSource2))
            Catch ex As Exception
                Dim x As String
                x = ex.Message
            End Try
            End Sub

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
            Try
                Dim ds As New dsMatriz
                'ReportViewer1 = New Microsoft.Reporting.WebForms.ReportViewer
                'ReportViewer1.ProcessingMode = ProcessingMode.Local
                'AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf LocalReport_SubreportProcessing
                'ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet2_Orders", ds.Tables("dsMatriz")))

                'AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf LocalReport_SubreportProcessing
                ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("dsBolsa", ds.Tables("dsBolsa")))
            Catch ex As Exception
                Dim x As String
                x = ex.Message
            End Try
        End Sub
    End Class

    ------------------------------------------------------
    He puesto para que me den alguna luz o por el contrario me puedan corregir y puntualizar mi error.

    Agradezco su colaboracion prestada.

    jueves, 21 de mayo de 2009 21:10
  • Hola,

    ¿Sigues con tú problema?

    Un Saludo


    Fran Díaz | {geeks.ms/blogs/fdiaz/} | {onobanet.com} | {secondnug.com}
    jueves, 28 de mayo de 2009 14:40
    Moderador
  • Continuo con mi inconveniente...... Minimo debe ser algo pequeño que se me pasa; pero no doy.
    Ojala pudieran darme alguna luz sobre este tema.
    miércoles, 10 de junio de 2009 21:53
    • Propuesto como respuesta Tancho martes, 16 de junio de 2009 20:26
    martes, 16 de junio de 2009 20:26