none
llenar reporte crystal report RRS feed

  • Pregunta

  • Muy  buenas, viendo las limitaciones de reportviewer me he instalado crystal report pero no se como hacer lo siguiente:

    tengo las clases

    Public Class EFactura
        Public Property Numero() As Integer
        Public Property fecha() As String
        Public Property formapago() As String
        Public Property nombre() As String
        Public Property calle() As String
        Public Property distrito() As Integer
        Public Property poblacion() As String
        Public Property provincia() As String
        Public Property iva() As Integer
        'Creamos una lista con una nueva Instancia de la clase Articulo
        'esta lista contendra el detalle de la factura
        Public Detail As New List(Of EArticulo)()

    End Class

    Public Class EArticulo
        Public Property codigo() As String
        Public Property descripcion() As String
        Public Property uds() As Integer
        Public Property descuento() As Integer
        Public Property bruto() As Decimal
        Public Property importe() As Decimal
        Public Property precio() As Decimal
    End Class

    Las cuales lleno en un form, pues en ese form tengo un boton mediante el que quiero que aparezca mi informe, pero nose como llenarlo por asi decirlo, podrian orientarme?

    gracias

    miércoles, 30 de abril de 2014 22:21

Respuestas

  • Hola:
    Me.rdInforme es un ReportDocument
    Me.crvInforme es un CrystalReportViewer
    El proceso es el siguiente:
    1.- Cargar en el ReportDocument el fichero de Crystal (Extension rpt)
    2.- Cargar un DataTable con los datos filtrados que quieres mostrar en el informe
    3.- Cargar el ReportDocument con el DataTable
    4.- Cargar el CrystalReportViewer con el ReportDocument
    Te paso un ejemplo de estos pasos.

        Private Sub FrmCrystal_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Me.rdInforme.Load(TU_FICHERO_RPT)
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "FrmCrystal_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Close()
            End Try
            Dim ldtDataTable As DataTable = lF_dtCrearDataTable()
            If ldtDataTable Is Nothing Then
                MessageBox.Show("No hay datos", "FrmCrystal_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Close()
            End If
            Me.rdInforme.SetDataSource(ldtDataTable)
            Me.crvInforme.ReportSource = Me.rdInforme
        End Sub

    Espero que te sirva

    Un saludo desde Bilbo
    Carlos

    viernes, 2 de mayo de 2014 7:46

Todas las respuestas

  • que es lo que quiere llenar

    ese variable es un reporte 

    pues puede pasarlos como parametros deste de vb al reporte 

    busca en internet pasa parametros de vb a cristal

    miércoles, 30 de abril de 2014 22:35
  • gracias por responder, quiero pasar los valores de mi clase EFactura con su lista detail al informe, como parametro no me valdria (si es el mismo concepto que en reportviewer) ya que la lista detail es dinamica (va aumentando o disminuyendo dependiendo del articulo)

    en reportviewer lo hacia asi:

    Dim frm As New impresiones()

                frm.Titulo = "Ticket de Venta"
                frm.Empresa = "Cliente"
                frm.Invoice.Add(invoice)
                frm.Detail = invoice.Detail
                ficheroaeliminar = "Rep_pc" & numero1 & ".pdf"

                frm.ReportViewer1.LocalReport.DataSources.Clear()
                '
                'Establezcamos los parametros que enviaremos al reporte
                'recuerde que son dos para el titulo del reporte y para el nombre de la empresa
                '
                Dim parameters As ReportParameter() = New ReportParameter(1) {}
                parameters(0) = New ReportParameter("parameterTitulo", frm.Titulo)
                parameters(1) = New ReportParameter("parameterEmpresa", frm.Empresa)

                '
                'Establezcamos la lista como Datasource del informe
                '
                frm.ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("encabezado", frm.Invoice))

                '
                'Enviemos la lista de parametros
                Dim parametros As New List(Of Microsoft.Reporting.WinForms.ReportParameter)

                parametros.Add(New Microsoft.Reporting.WinForms.ReportParameter("direcciontienda", tienda))
                parametros.Add(New Microsoft.Reporting.WinForms.ReportParameter("telefonotienda", telefonotienda, False))

                frm.ReportViewer1.LocalReport.SetParameters(parametros)
                'ReportViewer1.LocalReport.SetParameters(parameters)



                frm.ReportViewer1.RefreshReport()

    • Editado Adm1990 jueves, 1 de mayo de 2014 11:12
    jueves, 1 de mayo de 2014 11:11
  • Hola:
    Me.rdInforme es un ReportDocument
    Me.crvInforme es un CrystalReportViewer
    El proceso es el siguiente:
    1.- Cargar en el ReportDocument el fichero de Crystal (Extension rpt)
    2.- Cargar un DataTable con los datos filtrados que quieres mostrar en el informe
    3.- Cargar el ReportDocument con el DataTable
    4.- Cargar el CrystalReportViewer con el ReportDocument
    Te paso un ejemplo de estos pasos.

        Private Sub FrmCrystal_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Me.rdInforme.Load(TU_FICHERO_RPT)
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "FrmCrystal_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Close()
            End Try
            Dim ldtDataTable As DataTable = lF_dtCrearDataTable()
            If ldtDataTable Is Nothing Then
                MessageBox.Show("No hay datos", "FrmCrystal_Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Close()
            End If
            Me.rdInforme.SetDataSource(ldtDataTable)
            Me.crvInforme.ReportSource = Me.rdInforme
        End Sub

    Espero que te sirva

    Un saludo desde Bilbo
    Carlos

    viernes, 2 de mayo de 2014 7:46
  • gracias por responder, podrias decirme por que me tira un error en mis antiguas conexiones (llamadas a funciones donde cojo datos de la base de datos) cada vez que agrego un crystalreportviewer?

    Es agregar el viewer y el rpt y me da errores cada vez que hago una consulta y lo meto en un datatable, por ejemplo:

            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strsql = "SELECT DISTINCT * FROM Clientes"

            Dim adp As New OleDb.OleDbDataAdapter(strsql, conn)
           

            ds.Tables.Add("tablareparaciones")
            adp.Fill(ds.Tables("tablareparaciones"))

            Principal.comboboxcliente.DataSource = ds.Tables("tablareparaciones")   error aqui
            Principal.comboboxcliente.DisplayMember = "Nombre"
            Principal.comboboxcliente.ValueMember = "Id"

    Todo esto sin agregar el crystal va perfecto.

    MUCHAS GRACIAS

    viernes, 2 de mayo de 2014 11:47
  • gracias por responder, podrias decirme por que me tira un error en mis antiguas conexiones (llamadas a funciones donde cojo datos de la base de datos) cada vez que agrego un crystalreportviewer?

    Es agregar el viewer y el rpt y me da errores cada vez que hago una consulta y lo meto en un datatable, por ejemplo:

            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strsql = "SELECT DISTINCT * FROM Clientes"

            Dim adp As New OleDb.OleDbDataAdapter(strsql, conn)
           

            ds.Tables.Add("tablareparaciones")
            adp.Fill(ds.Tables("tablareparaciones"))

            Principal.comboboxcliente.DataSource = ds.Tables("tablareparaciones")   error aqui de conversion de "" a double, pero no entiendo el por qué
            Principal.comboboxcliente.DisplayMember = "Nombre"
            Principal.comboboxcliente.ValueMember = "Id"

    Todo esto sin agregar el crystal va perfecto.

    MUCHAS GRACIAS


    viernes, 2 de mayo de 2014 11:52
  • Hola:
    Prueba con este codigo

     Dim dt As New DataTable
     Dim strsql = "SELECT DISTINCT Nombre, Id FROM Clientes"

     Dim adp As New OleDb.OleDbDataAdapter(strsql, conn)

     adp.Fill(dt)

     Principal.comboboxcliente.DataSource = dt
     Principal.comboboxcliente.DisplayMember = "Nombre"
     Principal.comboboxcliente.ValueMember = "Id"
     
     P.D.
     No entiendo el porque de SELECT DISTINCT; se supone que en la tabla de clientes estos no se repiten, es decir que no hay el mismo cliente con 2 Id diferentes.
     
     Un saludo desde Bilbo
     Carlos

    miércoles, 7 de mayo de 2014 8:42