sábado, 8 de junio de 2013

Informes con ReportViewer sobre modelo de Entity Framework

Creamos un nuevo proyecto Windows Forms con el Framework 4.0. Agregamos, como siempre, el nuestro modelo de datos de Entity Framework, usando esta vez el enfoque "Model first". Para ello pulsamos botón derecho sobre el proyecto, y Agregar/Nuevo elemento. Buscamos "ADO.NET Entity Data Model", le damos un nombre y creamos nuestro modelo. En mi caso:


Cuando tengamos el modelo creado, hacemos botón derecho sobre el, y pulsamos en "Generar Base de datos desde el modelo", seleccionamos el origen de datos deseado así como la base de datos y generámos las instrucciones DDL de nuestra base de datos. Lo ejecutamos para crear el metadata y listo para trabajar.

A nuestro formulario principal vamos a añadir un componente ReportViewer donde mostraremos el informe. Un ComboBox para seleccionar la familia de productos y un botón para ejecutar la acción.

Ahora vamos a crear el informe, para ello nuevamente pulsamos botón derecho sobre el proyecto, Agregar / Nuevo elemento y esta vez seleccionamos en la sección de Reporting, Informe (Report), Le damos un nombre y comenzamos a crear el informe.



En este paso vamos a crear los conjuntos de datos que usaremos en el informe, para ello en la barra de tareas "Datos del informe" hacemos botón derecho sobre Conjunto de Datos y le damos a Agregar nuevo conjunto de datos. Le damos un nombre y pulsamos en Nuevo / Objeto y buscamos en nuestro modelo, la entidad que queramos usar, en mi caso "Articulos". Este proceso lo repetimos con todas las entidades que queramos involucrar en nuestro informe.



Ahora solo tenemos que diseñar el informe como queramos, agregando gráficos, tablas, etc. y vinculando los conjuntos de datos a los distintos componentes.



Que pasa si queremos hacer un gráfico con datos de dos conjuntos de datos diferentes, una solución puede ser la siguiente:

Creamos una nueva Clase y la llamamos Vistas, por ejemplo. Dentro vamos a crear metodos que nos devuelve un objeto que satisface la interfaz IQueryable que nos devuelve los datos obtenidos desde el modelo de Entity Framework con consultas LINQ. por ejemplo:

01         public IQueryable<DetalleCompraVenta> getCompraVenta(
02         )
03         {
04             return (from c in this.getTotalVentas()
05                     select new DetalleCompraVenta
06                     {
07                         articulo = c.articulo,
08                         ventas = c.ventas,
09                         compras = 0
10                     }).Union(from d in this.getTotalCompras()
11                              select new DetalleCompraVenta
12                              {
13                                  articulo = d.articulo,
14                                  ventas = 0,
15                                  compras = d.compras
16                              }
17                     );
18         }

Por último, para agregar un conjunto de datos al informe con los datos de estos metodos, lo haremos de la misma forma que hicimos con las entidades del modelo. Ahora solo nos falta vincular este conjunto de datos al gráfico que queramos y listo.

El resultado del ejemplo es algo como esto:



Podéis descargar el ejemplo completo aquí.

No hay comentarios:

Publicar un comentario