Crear un velocímetro con Excel (Gráficas)
12/12/2010.Net C# Obtener Lista de Servidores
08/01/2011Gracias a un artículo de Jaas publicado en Código de pura cepa, he conseguido solucionar uno de los grandes temas que me rondaba por la cabeza, y no es otro que la de imprimir imagenes cuya ruta está grabada en un campo de una tabla de una base de datos.
Os pongo aquí el post original, y a continuación explicaré algunas variaciones y aclaraciones que aunque el post es bueno, para los que no estén acostumbrados iré detallando.
Matizaciones previas:
Para hacer el informe o report, necesitamos crear un molde previamente, que luego podremos ir rellenando tantas veces como queramos, pero es muy importante crear correctamente este informe o report inicial.
Para la creación del report, también será preciso crear un dataset y un datatable "Molde" que nos permitirá confeccionar el Report "Molde" que rellenaremos posteriormente.
En el DataTable que utilizaremos para rellenar los datos, añadiremos una nueva columna que será del tipo "System.Byte[]", y que será quien almacene la imagen propiamente dicha.
Los campos originales que contiene la tabla en la base de datos son (ID, VALOR y RUTA), y el campo Imagen lo hemos añadido al DataTable para poder utilizarlo posteriormente en la confección del Report.
Una vez tenemos el "molde de datos" crearemos el informe utilizando el molde (Datatable) que hemos confeccionado.
En proyecto añadiremos un nuevo elemento (Categoría Reporting) y seleccionaremos el Crystal Report.
Desde el explorador de campos, o mediante el asistente, buscaremos el Datatable que hemos creado de tal manera que podamos seleccionar los campos, e insertarlos en la zona de Detalle.
Una vez tenemos todo esto, ya podemos comenzar a picar el código:
En primer lugar, hay que definir una función que transforme la imagen en Bytes. Aquí podeis hacer un copiar y pegar de esta función y luego llamarla. Lo que hace, es cargar la imagen que le pasemos (jpg, bmp, etc.) en un Array de Bytes, y posteriormente pasarle este array de Bytes al Documento para que se pueda dibujar.
-
span style="color: #808080;">""//Creo el archivo
-
//Cargo el Archivo en modo binario
-
//Creo un Array de Bytes donde guardare la imagen
-
//Cargo la imagen en el array de Bytes
-
//Devuelvo la imagen convertida en un array de bytes
-
Si no entendeis muy bien el código de arriba, no os preocupeis, es algo técnico.
A continuación explicaré la teoría de los pasos que vamos a realizar:
- El siguiente paso será añadir un visor de Crystal Reports a nuestro proyecto, para poder visualizar el informe que queramos visualizar.
- En nuestro caso instanciaré una clase que me permitirá cargar los datos de una base de datos, con un método que devuelve un Dataset.
- Deberemos instanciar:
- Un dataset para depositar los datos de la base de datos
- Un Report/Informe del molde que hemos creado previamente
- Un DataTable que contendrá los datos de la tabla del Dataset
- Y finalmente una Datafila (Datarow) para añadir a cada fila la imagen (array de Bytes)
- Cuando carguemos los datos de la base de datos en el dataset, y a su vez en la tabla. Esta tabla solo contiene datos, así que deberemos añadir una columna del tipop System.Byte[] para que encaje con el Dataset (molde) que hemos diseñado al principio.
- A continuación, mediante una relectura de las filas de la tabla (Datatable), añadiremos la imagen mediante la función (Cargar Imagen) a cada fila de la nueva columna que hemos añadido.
- Luego, asignaremos al Report/Informe como Datasource la Tabla (Datatable) que contiene los datos.
-
span style="color: #808080;">"TABLABORRAME""Imagen""System.Byte[]""Imagen"
- Y finalmente, asignaremos al ReportViewer el Report/Informe que hemos creado que dará algo similar a esto.
5 Comments
Sinceramente mil respetos amigo… bien esa informacion gracias no sabe de la que me termina de salvar en verdad le agradezco mucho necesitaba para terminar mi tesis y no sabe como me sirve estoy gracias……
hola que tal muy buen ejemplo.. tendras el codigo para descarga!! seria de gran ayuda…saludos
Hola noahop,
lamentablemente no tengo el ejercicio, aunque si tienes más dudas puedo irte guiando.
Muy buen ejemplo me sirvio de mucho gracias
Excelente recurso! estuve buscando por toda la red por casi 1 semana y por fin encontre esta muy buena aportacion! Muchas gracias! Saludos, desde Honduras, Centro America