Lo primero que deberemos realizar es instalar el Crystal
Report en nuestra máquina para poderlo utilizar dentro de nuestro Visual Studio
2010. Para ello tendremos que irnos a su página oficial y descargárnoslo.
Una vez tengamos instalado el Crystal Report realizaremos un
pequeño programa de ejemplo. En que crearemos un DataSet y le introduciremos
datos con los que generaremos el informe.
IMPORTANTE: en el
proyecto tenemos que estar trabajando
con el Framework 3.5 ya que con el 4 algunos controles del Crystal Report no
aparecen.
El aspecto de la aplicación podría ser una cosa parecida a
esto:
Como veis simplemente es un DataGridView que hemos llenados
con un DataSet y dos botones. Aquí os dejo el código para llenar el DataSet y
llenar el DataGridView.
Los primero será un
objeto DataSet a nuestra clase principal.
// Creamos el DataSet
DataSet MisDatos = new DataSet();
Después en el evento “Load”
del formulario llenaremos el DataSet y con el mostraremos los datos en un
DataGridView.
private void Form1_Load(object sender, EventArgs e)
{
// Añadimos una tabla al Dataset
MisDatos.Tables.Add("Empleados");
// Agremos las columnas a la Tabla
MisDatos.Tables["Empleados"].Columns.Add("DNI");
MisDatos.Tables["Empleados"].Columns.Add("Nombre");
MisDatos.Tables["Empleados"].Columns.Add("Apellidos");
MisDatos.Tables["Empleados"].Columns.Add("Telefono");
// Creamos varias
filas y se las agregamos al DataSet
DataRow fila1 = MisDatos.Tables["Empleados"].NewRow();
fila1["DNI"]
= "54090909Z";
fila1["Nombre"]
= "Pepe";
fila1["Apellidos"]
= "Sanchez Vega";
fila1["Telefono"]
= "928721102";
DataRow fila2 = MisDatos.Tables["Empleados"].NewRow();
fila2["DNI"]
= "33012909Z";
fila2["Nombre"]
= "David";
fila2["Apellidos"]
= "Perez Santana";
fila2["Telefono"]
= "928091502";
DataRow fila3 = MisDatos.Tables["Empleados"].NewRow();
fila3["DNI"]
= "10033909Z";
fila3["Nombre"]
= "Maria";
fila3["Apellidos"]
= "Hernadez Peñate";
fila3["Telefono"]
= "928512502";
// Agregamos las filas
MisDatos.Tables["Empleados"].Rows.Add(fila1);
MisDatos.Tables["Empleados"].Rows.Add(fila2);
MisDatos.Tables["Empleados"].Rows.Add(fila3);
// Rellenamos el
nuestro Datagrid
dtgEmpleados.DataSource =
MisDatos.Tables["Empleados"];
}
Vale ahora vamos a la parte de generar el informe. Para ello
deberemos agregar a nuestro proyecto un nuevo elemento para ello tendremos que
ir a la ventana de explorador de soluciones y pulsar ratón secundario y
seleccionar la acción de “Agregar nuevo elemento”.
Y Agregaremos un conjunto de datos. Este será el DataSet que
se le pasara el Crystal para generar el informe y que contiene la estructura de
datos que usara.
Ahora tendremos que definir los datos del DataSet que vamos
a usar para el informe. Para ello tendremos que agregar un “DataTable” y después
ir agregando las columnas que vamos a usar en nuestro informe.
Ahora tendremos que repetir la acción anterior y agregar un “Nuevo elemento” pero esta vez agregaremos
ya el informe.
Este informe lo vamos a generar con el asistente así que
siguiente.
Después de ventana anterior se nos mostrara esta otra.
Esta ventana es donde definimos el origen de datos en
nuestro caso el DataSet que hemos creado
anteriormente. Para ello tendremos que abrir el árbol que pone “ADO.NET
DataSets” y agregar nuestro DataSet.
En esta ventana tendremos que agregar los campos que
queremos utilizar para generar el informe en mi caso voy a seleccionar todos
los campos.
Nos aparecerán más ventana por si queremos agrupar por algún
campo o filtrar para este ejemplo no vamos a utilizar ninguna de estas
opciones.
Dejamos el valor por defecto y finalizamos. Ahora se nos abrirá
el diseñador de informes del Crystal Report. Aquí es donde definiremos los encabezados,
etiquetas, imágenes etc... Que queramos que se muestren en nuestro informe.
Vale ahora lo que aremos será crear una pequeña función para
volcar los datos que se muestran en el DataGridView y que vienen de un objeto
DataSet de .NET a nuestro DataSet tipado
que hemos creado anteriormente. Este es el código de la función.
// Traspasa Datos
private DtEmpleados TraspasaDatos()
{
// Creamos el objeto
DtEmpleados Empleados = new DtEmpleados();
// Creamos filas y se la vamos agregando mediante un bucle
for(int i=0; MisDatos.Tables[0].Rows.Count > i; i++)
{
DtEmpleados.DataTable1Row
fila = Empleados.DataTable1.NewDataTable1Row();
fila.DNI = MisDatos.Tables[0].Rows[i]["DNI"].ToString();
fila.Nombre
= MisDatos.Tables[0].Rows[i]["Nombre"].ToString();
fila.Apellidos
= MisDatos.Tables[0].Rows[i]["Apellidos"].ToString();
fila.Telefono
= MisDatos.Tables[0].Rows[i]["Telefono"].ToString();
// Agregamos la fila a nuestro DataSet tipado
Empleados.DataTable1.AddDataTable1Row(fila);
}
return Empleados;
}
Vale ahora que ya hemos realizado el traspaso de datos ahora
nos queda pasarle estos datos al informe y mostrar el informe. Para ello
agregaremos un nuevo formulario al proyecto para visualizar el informe. Para
ello debemos irnos al explorar de soluciones y agregar un “Nuevo elemento”.
Ahora en el nuevo formulario que acabamos de agregar
agregaremos un control nuevo que se llama “ReportViewer” que los podéis
encontrar en la categoría “Informe”. Este control el visor de los informes que
genera el Crystal Report.
Lo agregáis al formulario y los ajustáis.
Bueno como veis donde vamos a visualizar el informe del
Crystal Report es en otro formulario por ello deberemos modificar el
constructor de este formulario para poderle pasarle los datos y así poder
generar el informe. Adjunto el código de como sobrecargar el constructor y
agregarle los datos al informe y como mostrar este informe en el visor del
Crystal Report.
public partial class FVisor : Form
{
DtEmpleados MisDatos;
public FVisor()
{
InitializeComponent();
}
// Sobrecargamos el
contrustor del forumario
public FVisor(DtEmpleados Datos)
{
InitializeComponent();
// Pasamos los datos que obtenemos de constructor
MisDatos
= Datos;
}
private void FVisor_Load(object sender, EventArgs e)
{
// Creamos objeto del informe
CrystalReport1 Informe = new CrystalReport1();
// Pasamos los datos al informe
Informe.SetDataSource(MisDatos);
// Le pasamos el informe al visor
this.crystalReportViewer1.ReportSource = Informe;
}
}
Bueno ahora volveremos al formulario principal al evento “Clic”
para generar el informe.
private void button2_Click(object sender, EventArgs e)
{
// Creamos una instacia de nuestro DataSet tipado
// y lo rellenamos con la función de traspaso
DtEmpleados DatosEmp = new DtEmpleados();
DatosEmp
= TraspasaDatos();
// Creamos el
formulario y le pasamos los datos al formulario
FVisor MiVisor = new FVisor(DatosEmp);
// Y lo mostramos
MiVisor.Show();
}
Ya con esto ya se nos habrá imprimido un informe algo
sencillo pero bueno ya lo demás es cuestión de añadir elementos y modificar el
informe mediante el diseñador.
Ahora otra imagen dejándolo más presentable añadiendo una
imagen.
Vídeo de la aplicación funcionando.
Enlace con el proyecto de ejemplo: aqui
excelente tutorial, pero al compilar me aparece un ventana que solicita user y contraseña de la base de datos... Ayuda
ResponderEliminarhola, es muy bueno el tutorial, ahora cuento con este problema al momento de correr el programa me sale lo siguiente:
ResponderEliminarSystem.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'
WindowsApp3.FVisor.crystalReportViewer1.get devolvió Nothing.