none
insertar imagen en un reporte rdlc RRS feed

  • Pregunta

  • Hola

    Llevo muy poco tiempo programando y algo aparentemente sencillo no soy capaz de resolverlo.
    Estoy intentado añadir una imagen que tengo en un directorio de mi ordenador a un informe y no se como hacerlo. la idea es que tanto el nombre de la imagen como el directorio donde esta puede cambiar por lo que habría que pasarle la ruta de alguna manera para que el informe sepa donde esta la imagen.
    Llevo un buen rato buscando en el foro y no me aclaro, he visto que se pueden pasar parámetros al informe y había pensado en usuar un parámetro para la ruta pero no tengo claro como hacerlo.

    He crado un form con un reportviewer y un formulario.
    He añadido este codigo:

    Imports Microsoft.Reporting.WinForms

    Public Class Form1

       Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
             ReportViewer1.LocalReport.EnableExternalImages = True
            Dim path As String = "file://C:/imagen.jpg"
            Dim parametros As New List(Of ReportParameter)
            parametros.Add(New ReportParameter("Ruta", path, False))
            Me.ReportViewer1.LocalReport.SetParameters(parametros)
            Me.ReportViewer1.Refresh()
        End Sub
    End Class

    Pero cuando llega a la linea Me.ReportViewer1.LocalReport.SetParameters(parametros) me da error: Se ha producido un error durante el procesamiento local de informes.

    Por otro lado, cuando consiga crear el parámetro como lo paso a la imagen del reporte.rdlc

    Gracias

    martes, 3 de mayo de 2016 18:06

Todas las respuestas

  • Hola Pequiro te sugiero que envies la ruta de la imagen como una variable tipo STRING y despues de recibirla en el reporte vincular

    Dim rpt As ReportDocument = New ReportDocument()
            rpt.Load("Reportes\" & REPORTEIMP & "", CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy)
            rpt.SetParameterValue(0, VARREPORTE1T)
            rpt.SetParameterValue(1, VARREPORTE2T)
            CrystalR1.AllowedExportFormats = formats
            CrystalR1.ReportSource = rpt
            CrystalR1.Show()
            CrystalR1.Refresh()

    En mi caso lo puse así (AUNQUE SÉ QUE EL MIO ES UN REPORTE DE CRYSTAL PERO LA ESTRUCTURA DE PROGRAMACIÖN ES LA MISMA), donde "VARREPORTE1T" es un dataset tipado que envio y "VARREPORTET2" es la ubicación de la imagen, entonces al agragar el objeto OLE o imagen en el reporte harás lo siguiente:

    Espero te sirva de ayuda.

    Saludos


    Jairo Garzón Forero - MSDN.COM/ES-CO


    • Editado Jairo Garzón miércoles, 4 de mayo de 2016 16:19 Faltó un comentario
    miércoles, 4 de mayo de 2016 16:18
  • gracias Jairo por tu respuesta pero la verdad es que estoy perdido.
    Me imagino que al ser en cristal es muy difierente y con los pocos conocimnientos que tengo me pierdo.

    En definitiva lo que he hecho es lo que dices tu de pasar la ruta pero por parametro. Ademas he conseguido que no me de error creado el parametro en el informe rdlc como string, que me imagino es necesario para poder recibirla.
    He probado con esto:

            Dim p(0) As ReportParameter
            p(0) = New ReportParameter("Ruta", "file://c:/imagen.jpg", True)

            ReportViewer1.LocalReport.EnableExternalImages = True
            ReportViewer1.LocalReport.SetParameters(New ReportParameter() {p(0)})
            ReportViewer1.LocalReport.Refresh()
            Me.ReportViewer1.RefreshReport()

    He creado el parametro poniendo como nombre Ruta y tipo string, en el informe pero sigue apareciendo la cajita con la cruz roja.

    De hecho sin tener en cuenta el tema de parametros, en source pongo externa y en value pongo file://c:/imagen.jpg y la imagen se ve en el informe pero cuando lo ejecuto desaparece y se ve la cruz roja cosa que me hace pensar que algo en la ruta no esta bien.

    No debería funcionar de esa forma?

    

    jueves, 5 de mayo de 2016 16:55
  • Hola Pequiro:

     Por favor revisa este articulo:

    ReportViewer y Rdlc, ejemplo Factura- Eviar Imagen

     Ahí menciono como enviar una imagen a un RDLc.

     Básicamente el RDLC debe de recibir un arreglo de bytes el cual deberás de enviárselo por código, bien podrías definir una carpeta en el mismo directorio de tu aplicación después tomar el path y convertir la imagen presente en un arreglo de bytes y tendrás el tema resuelto.


    Saludos desde Monterrey, Nuevo León, México!!!

    jueves, 5 de mayo de 2016 22:10
  • Hola Jose Luis

    Ya lo había visto y lo he intentado siguiendo tu manual pero no me funcionó.

    Te cuento un poco lo que hice:

    Cree la clase para pasar la imagen al report

    Public Class ireport

        Private _Imagen As Byte()

        Public Property Imagen() As Byte()
            Get
                Return _Imagen
            End Get
            Set(ByVal Imagen As Byte())
                _Imagen = Imagen
            End Set
        End Property
    End Class

    Luego en el formLoad cree un picturebox le aplique la imagen y use tu funcion para pasar a array de bytes.

           

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


            Dim imagereporte As New ireport
            Dim pb As New PictureBox
            pb.Image = Image.FromFile("c:\imagen.jpg")
            imagereporte.Imagen = GetBytes(pb.Image)

        End Sub    Private Function GetBytes(ByVal imageIn As Image) As Byte()
            '
            'Usamos la clase MemoryStream para contener los bytes que compone la imagen

            Dim ms As New MemoryStream()
            imageIn.Save(ms, ImageFormat.Jpeg)
            '
            'Retornamos el arreglo de bytes

            'Return ms.ToArray()
            Return ms.ToArray

        End Function

    En el Report.rdlc agrege el objeto ireport--Imagen y puse las opciones que me dijiste pero no me funcionó.

    He intentado descargarme los ejemplos que pones pero parece que ya no estan disponibles.

    viernes, 6 de mayo de 2016 13:22
  • Hola:

     Podrías mostrarme las propiedades del objeto Image en tu reporte, muchas veces omitimos hacer esta configuración.

     Por alguna razón los ejemplos ya no están disponibles si me mandas un correo por medio del formulario de contacto con gusto te envió el proyecto en el lenguaje que desees.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 6 de mayo de 2016 14:25
  • Hola Jose Luis

    Como la pantalla que tu pones en tu artículo no me sale igual he optado por poner las opciones en las propiedades de la imagen. Te paso todas las pantallas para que las veas.

    https://onedrive.live.com/redir?resid=8E0F7642E2922543!804&authkey=!AAO6avA-e7Ema6Q&v=3&ithint=photo%2cjpg

    https://onedrive.live.com/redir?resid=8E0F7642E2922543!806&authkey=!AKu21chrfZTCKwQ&v=3&ithint=photo%2cjpg

    https://onedrive.live.com/redir?resid=8E0F7642E2922543!805&authkey=!AJT6AT_dAEM8e88&v=3&ithint=photo%2cjpg

    https://onedrive.live.com/redir?resid=8E0F7642E2922543!807&authkey=!ACQPFf5Dpp0Yvg0&v=3&ithint=photo%2cjpg

    martes, 10 de mayo de 2016 6:42