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.