Introducción
El siguiente ejemplo explica como vincular un campo imagen que se obtiene desde una base de datos.
En este caso se utiliza un reporte de Reporting Service en modo local, por eso se cuanta integrado al VS un archivo de extensión .rdlc
Definición de los datos
Para asignar los datos se ha creado un DataSet Tipado, con dos DataTable, uno que contendrá un campo que representa el logo de la compañía, el segundo DataTable tendrá los datos del listado.
Definición del campo de imagen
Dentro del reporte se ubico un campo de imagen, pero para que este tome la información provista por el datatable debe definirse algunas propiedades
Las 3 dentro de la sección “Data” son las que deben tener nuestra atención.
La propiedad Source debe asignarse como “Database” para que tome la info del datatable, y es recomendable además asignar el MiMeType para que sepa con que formato vendrá la imagen.
Pero la propiedad algo mas compleja de definir es “Value”, ya que esta requiere de una expression
Se puede hacer uso de la ventana que ayude con esta tarea:
En este caso se seleccionando del primer Data Source de Empresa el campo de Logo, pero se hará uso de método First() para tomar solo un valor del mismo, ya que la imagen es solo una.
[C#] | [VB.NET] |
Hola:
ResponderEliminarMe da error porque no encuentra la clase "microsoft.reporting.winforms", no se si esta clase es privada o viene con el visual studio.
Un Saludo.
Juan Carlos
Perdona la clase que da error es:
ResponderEliminarReportDataSource
Y
Microsoft.Reporting.WinForms.ReportViewer
hola Euroasesor
ResponderEliminarQue raro esto que comentas
Has podido verificar que el proyecto tengas la referencias de forma correcta ?
o sea cuando abres el codigo, y vas a la parte de referencia del proyecto, puede ver que no falte ninguna, si ves que falta esta en particulas agregala.
Que distribucion del VS estas utilziando, es acosa una verison express ? lo pregunto porque hasta dodne se esta no puede hacer uso de Reporting
saludos
Buenas Noches Leandro.
ResponderEliminarTenía un tiempo que no entraba a su blog y me entero de su nombramiento alcanzado. Lo felicito por ese logro tan importante y suyo. Un motivo mas para seguir adelante con lo que ya viene haciendo...
Bueno, ahora le planteo lo sig.: Estoy usando: Visual Studio 2010 Ultimatum en Inglés y recien lo configuré para trabajar con Firebird 2.5, FirebirdDDEXProvider-2.0.5 y NETProvider-2.6.0, seguí la configuración y me funciona pudiendo manejar la bd desde el server explorer. Además he creado un dataset con un tableadapter alm cual le he creado 3 consultas y todo bien. El Problema: Cuando intento crear una cuarta consulta usando parametros y Error... Visual studio ha encontrado un error y necesita cerrarse. He investigado y he probado muchas opciones. Instale visual en otra partición hice nuevamente la configuracion de firebird y el problema sigue igual. Lo último que probe fue que en la 3 consulta la modifiqué incluyendo la consulta 4 con un and funcionó. Al parecer no funciona con una cuarta consulta sobre el mismo tableadapter. Agradezcon tu atención.. Gracias.
Hola se que este post es muy viejo ya pero ando trabajando con esto y no me sale la imagen solo sale una X roja, las imagenes las saco de una carpeta que tengo, las convierto en byte[] y la meto en un datatable pero a la hora de enviarlo al reporte RDLC solo me sale una X roja. podria alguien ayudarme por fevor, gracias y disculpen el que publique en un post tan viejo D:
ResponderEliminarhola Pedro
ResponderEliminarel resto que envias en el datatable si se visualizan en el reporte ?
saludos
si todo lo demas se muestra pero la imagen no, ya puse el campo de la imagen en tipo byte(), pero no me muestra la imagen mas los datos si los envia.
ResponderEliminarme parese raro ya que si utilizo un DataGridview con un campo tipo imagen y le cargo el arreglo de byte si me muestra la imagen pero al enviarla al reporte no me muestra nada.
por ahora utilice la opcion de ponerla como externa y cargando la direccion de la imagen como File: URLdeimagen
hola Pedro
ResponderEliminarvalidaste que el campo de imagen tenga la formula correcta que se vincule a ese campo de imagen ?
valida tambien combo de source que defines
imagen
prueba usando el que dice "database", valida correctamente el tipo de imagen, si asignas un gif pero defines un jpg quizas no funcione
saludos
si tenia todo asi pero ya lo solucione, era error mio, al meterlo al datatable se convertia a string, por que ? no lo se solo elimine el datatable y lo cree de nuevo y todo bien jeje, gracias por la ayuda
ResponderEliminarhola Pedro
ResponderEliminarla verdad esta muy raro lo que comentas, si el campo lo defines como byte array no veo que deba asignarse como string
es mas si insertas deberia fallar por la diferencia de tipos
saludos
al crearlo lo cree por error en string mas despues lo cambie a arreglo de bytes. supongo que ahi algo fallo al hacer el cambio, y la verdad no se que fuese peor al borrarlo y crearlo de nuevo ya me mostro todo bien.
ResponderEliminarDisculpa, pero no veo las imágenes. Ni en Explorer 9, ni en Chrome.
ResponderEliminarhola Marta
ResponderEliminarque raro yo accedo con IE8 y Firefox y veo las imagenes perfectamente
saludos
en IE creo que va a ser que lo tienes que iniciar sin los complementos, almenos eso me pasaba a mi antes, por eso cambie a chrome.
ResponderEliminarQue tal lenadro, como se pueden desplagar dos o mas imagenes? o que expresion se utilizaria para desplegarlas?
ResponderEliminarhola Erwin
ResponderEliminarla tecnica para mostrar uno o mas imagenes es la misma
defines un campo que sea un byte array en el datatable del dataset tipado y asignas la imagen alli
ya sea que lo tomes de una db, o lo cargues de un archivo, pero se aplica la misma tecnica que para una sola imagen
saludos
Hola Leandro,
ResponderEliminarGracias por el artículo estaba necesitando esto...
Pero estaba intentando agregar más Campos Integrados que por defectos ya están en la Carpeta de Built-in Fields(Campos integrados), he estado intentando buscarle la forma para poder agregar al informe como por ejemplo que usuario está Logeado en la Aplicación, y algunas otras cosas más. Lamentablemente cuando le doy click direcho al Campos Integrados, no me aparece ninguna lista desplegable de opciones y por tanto no hay forma de agregar otros campos personalizados.
No sé si supieras de alguna forma agregar campos con datos escogidos al reporte.
Espero tu respuesta. Gracias.
Un Abrazo.
hola Miguel
ResponderEliminarla verdad no se si entendi el planteo
pero si quieres pasarle datos adicionales al reporte porque no lo haces por medio de parametros
saludos
Hola Leandro,
ResponderEliminarpues mi intención era la siguiente, en mi programa tengo un formulario de Login, y cuando esté accede al programa e intente sacar un reporte, me gustaría que el Usuario que está logeado, aparezca en el reporte.
Intentaré con eso de los parámetros que en realidad no he usado eso aún.
Gracias por el dato.
Te agradecería si la idea se hizo más clara, y si pudieras decirme si con los parámetros es una buena opción hacer lo que pretendo.
Muchas gracias.
hola Miguel
ResponderEliminarclaro si la idea es enviar al reporte informacion simple puedes usar parametros
o sea le asignas los datos por un lado he informacion simpel para mostrar por parametros, el usuario que esta autenticado es valido enviarlo de esta forma
saludos
Hola Leandro,
ResponderEliminarSi bien logre mandar la información de 2 tablas a un informe por medio de un parámetro, el parámetro es el Texto de un TextBox. Sin embargo a lo que yo apuntaba era a lo siguiente: si de forma independiente osea fuera del informe que se carga con los DataSet, se pudiera jalar algun campo de una Tabla, por ejemplo de la Tabla Usuarios que tengo en mi BDD, jalar el Nombre del Usuario que se haya logeado.
En el Diseño del Reporte, te dan parámetros ya definidos(creo que asi se llaman) como por ejemplo el n° de paginas en total, el usuario(el nombre de la pc), la fecha que se ha generado el informe y otros... a mi me gustaría poder agregar al informe el Usuario que esté conectado y que haya generado el informe. En crystal report si es viable, sino me equivoco, sin embargo mi programa lo tengo desarrolado con VS 2013, y aún no sacan un CR compatible con esa versión.
Espero puedas corregirme (y sobre todo que me hayas entendido)si en caso lo que estoy pretendiendo es viable con el Report Viewer.
Muchas gracias.
hola Miguel
ResponderEliminarpero en reporting service puedes definir tus propios parametros
http://social.msdn.microsoft.com/Forums/es-ES/83fb8060-b0ff-4927-a46b-224c44d1a8f2/pasar-argumentos-a-reporte-rdlc?forum=vcses
http://social.msdn.microsoft.com/Forums/es-ES/50ce97cd-238b-49e9-8275-b132d9c092a6/parametros-en-un-rdlc?forum=vbes
como veras usarias
ReportViewer1.LocalReport.SetParameters(parametros)
para asignar el parametro
saludos
Hola Leandro,
ResponderEliminarSi! Esa es!
Gracias por la ayuda.
Un abrazo.
disculpa la molestia pero como se manda la imagen al datset esque soy un novato y apenas voy empezando con esto del c#
ResponderEliminarQue tal Leandro
ResponderEliminarhe tenido unos problemas al mostrar una imagen de mi base de datos, cuando lo intento mostrar en el reporte rldc solo me sale una X roja, desconozco como es la formcorrecta de mostrarlo en c#,
por favor si me puedes ayudar en la solucion.
hola perdon estoy tratando de hacer precisamente esto, del titulo.
ResponderEliminarMande la imagen a la BD como tipo LONGBLOB con las conversiones pertinentes, logico en el form hago la inversion y se muestra.
en si no pido mucha ayuda solo si tienes nuevamente el zip para ver el codigo.
ya he mandado todos los datos al reporte solo me falta la imagen, ya sea a un campo blob, imagen, o oeobject.
Gracias
hola Legna
ResponderEliminarque base de datos utilizas ?
porque en principio serie recuperar los datos por medio de una query y el campo castearlo a byte[] para poder usar la imagen
saludos
Gracias por la ayuda, me resuelve una parte pero me da el siguiente error: "Error 1 The call is ambiguous between the following methods or properties: 'Microsoft.Reporting.WinForms.ReportDataSource.ReportDataSource(string, System.Collections.IEnumerable)' and 'Microsoft.Reporting.WinForms.ReportDataSource.ReportDataSource(string, System.Data.DataTable)' C:\Users\Roberto\Desktop\New folder (2)\[csharp] ReportingImage\ReportingImage\Form1.cs 27 50 ReportingImage
ResponderEliminar"
hola
ResponderEliminarque tipo de dato estas asignando el ReportDataSource() ? porque parece que por los parametros no puede resolver que metodo debe llamar
saludos
mucho gusto y siempre siguiendo sus publicaciones. Pero si lo que deseo es cargar las imágenes desde un byte[]? como podría hacerlo?
ResponderEliminarhola David
EliminarPodrias hacer uso del File.ReadAllBytes("ruta") para obtener el byte[] del archivo y asignarlo al campo del datatable que vinculas al reporte
saludos
Mi estimado... Me parece excelete tu trabajo... q es de ayuda para nosotros. Y te voy a ayudar con algunas convenientes que se producen al convertir tu proyecto con el asistente de Visual Studio crea algunos errores. Y toca volver a eliminar y volver a asignar las referencias y en el caso del inconveniente de una llamada ambigua en el esta linea de codigo.
ResponderEliminarReportDataSource dataSourceEmpresa = new ReportDataSource("Productos_Empresa", LogoEmpresa());
la solucion consiste en agregar (DataTable)
ReportDataSource dataSourceEmpresa = new ReportDataSource("Productos_Empresa", (DataTable) LogoEmpresa());
Sigue Adelante.....
muchas gracias de gran utilidad el ejemplo
ResponderEliminarBuenos Días Leandro, tengo un campo de imagen en access 2003, cuando intento colocarla en un picturebox de Reportviewer, no se vizualiza, hice todos los pasos que nos diste pero no me funciona.
ResponderEliminarhola
EliminarImagino defines un dataset como origen de datos de reporte, no? si es asi estas validando que en el campo se asigne el array de byte de la imagen que quieres visualizar?
saludos
leandro, tengo una pregunta, si tenemos las imágenes en "Content/Photos" y deseo mostrarla en un reporte "Reporte.rdcl", y la ruta la almaceno en Base de Datos, la ruta se guardar asi: "~/Content/Photos/NombreImagen.jpg" ¿como lo muestro en el reporte rdlc? tienes u ejemplo?
ResponderEliminargracias...
hola
EliminarDeberias enviar la imagen junto con los datos del reporte
Analiza este mismo ejemplo como lo realizo con el logo, debes definir un datatable donde poder definir un campo del tipo Image y alli insertar el byte[] de la imagen
Usarias el File.ReadAllBytes() para recuperar el byte[] de la imagen desde su path fisico
saluos
Amigo en el data set, a la columna ejemplo Logo, se le debe de asignar como byte[], es que no me muestra la imagen en el .rdlc. Saludos gracias
ResponderEliminarMe encanta <3 Gracias.
ResponderEliminarHola, ya no esta el archivo para descargar
ResponderEliminarLeandro, hay alguna forma de editar fórmulas en el editor de reportes RDC de Visual Se 2019
ResponderEliminarRDLC
ResponderEliminar