Crear reportes rápidos con Crystal Reports en Visual Studio Net


Un recordatorio para algo de uso frecuente: Como crear reportes enlazados rapidamente a través de un xml que contenga la estructura de los campos a imprimir.

Asumo que tenemos cargado un dataset ds con una tabla llamada Table1 con los datos que queremos imprimir.

Por otro lado, lo que debemos hacer es crear un formulario (llamarlo por ejemplo FrmReportes) y colocarle un control CrystalReportViewer. A este control le ponemos como nombre CrvReportes.

En dicho formulario creamos una sobrecarga sobre el constructor para pasarle el reporte como parámetro:

public FrmReportes(CrystalDecisions.CrystalReports.Engine.ReportDocument Reporte)
  {
     InitializeComponent();
     this.CrvReportes.ReportSource = Reporte;
     this.CrvReportes.Show();
     this.ShowDialog();
  }

Ahora bien, para generar el reporte, debemos primero generar el xml con la estructura de los campos a imprimir:

 DataSet ds = new DataSet();
 ds.Tables.Add (controlador.GetAllDt()); //ejemplo de carga del dataset
 ds.WriteXml(@"c:temprepo.xml", ,XmlWriteMode.WriteSchema);  //el path debe tener permisos de scritura

Una vez generado el xml y almacenado en algún lugar del disco con permisos de escritura, vamos en el menú de Visual Studio a Project –> Add Component (Proyecto –> Añadir Componente) y agregamos el componente Crystal Report colocandole como nombre, por ejemplo RptReporte.rpt

Seleccionamos tipo de reporte “Reporte en Blanco” y luego, en el menú del explorador de campos, buscaremos la opción Crear nueva conexión –> Archivos de Base de Datos y nos permitirá seleccionar el archivo repo.xml creado anteriormente.

De esta manera podremos seleccionar de Table1 los campos de nuestro dataset a agregar al reporte.

Solo nos queda pendiente llamar al formulario contenedor del reporte pasandole como parametro el reporte:

CrystalDecisions.CrystalReports.Engine.ReportDocument mirepo;
mirepo = new RptReporte();
//asignamos el dataset para que actualice los datos:
mirepo.Database.Tables["Table1"].SetDataSource(ds);
//llamamos al contenedor
FrmReportes FrmRepor = new FrmReportes(mirepo);

Ojo: Es importante definir la estructura de página del reporte para impresoras genericas, a fin de que no genere problemas al imprimir en distintos modelos de impresora.
Esto lo hacemos haciendo click derecho sobre una sección o sobre el fondo del reporte –> Design –> Printer Setup –> Tildamos “No Printer”.
Allí mismo podemos predeterminar si la página va apaisada o no.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s