Crear informe sencillo con VS .NET 2003
[Ejemplo de creación de un informe sencillo con Crystal Reports .NET 2003]

Fecha: 27/Sep/2004 (23/Sep/2004)
Autor: Miguel García Rodríguez (kagueto.net@terra.es)

 


Este ejemplo muestra como crear un sencillo informe de una aplicación Windows con el Crystal Reports integrado en el Visual Studio .NET 2003 partiendo de una base de datos de Access.

Este ejemplo no es muy técnico ni requiere conocimientos de bases de datos de ningún tipo simplemente siguiendo los pasos se puede crear un informe muy sencillo para nuestra aplicación Windows, para cosas mas complicadas esta igual no sería la mejor solución.

Para crear informes con la versión integrada en el Visual Studio .NET 2003 hay que distinguir dos partes fundamentales por un lado el propio informe o archivo .rpt y por otro lado el visor o componente para visualizar informes incluido en .NET.

            Comenzaremos por crear el informe, para ello en el explorador de soluciones sobre el proyecto botón secundario   -->Agregar --> Agregar nuevo elemento …

 

 

Dentro del cuadro de diálogo que se nos abre escogemos Elementos de proyecto local --> Utilidad --> Crystal Report y en el nombre le pondremos el nombre que le queramos dar al informe, en este caso simplemente le llamaremos “Informe.rpt”.

 

 

            A continuación se nos abrirá el asistente para la creación de informes, en el cual dejaremos la opción por defecto que es Mediante el asistente de informes y dentro de estos el Estándar y le daremos a Aceptar.

 

            A continuación se nos abrirá el asistente para la creación de informes estándar donde iremos seleccionando las distintas opciones de nuestro informe. La primera opción que hemos de indicarle al asistente es el origen de datos que pueden ser distintas opciones desde una base de datos de sql Server, un archivo XML, un DataSet del proyecto, etc. en nuestro caso utilizaremos una base de datos de ACCESS para simplificar el ejemplo, escogemos entonces Archivos de base de datos pulsando sobre el símbolo + a la izquierda de la carpeta se nos abrirá el cuadro de diálogo para establecer manualmente el archivo “.mdb”. Una vez seleccionado se nos mostraran las tablas de nuestra base de datos, haciendo doble clic en cada una de las tablas las agregamos al informe, no tienen por que ser todas sino simplemente las que nos interesen. Una vez seleccionadas las tablas pulsamos sobre Siguiente para continuar con el asistente.

 

            En la siguiente ventana nos muestra los vínculos o relaciones que establece automáticamente entre las tablas, estos vínculos los establece por el nombre, normalmente por lo cual si dos campos de tablas distintas se llaman igual establecerá una relación entre ellas, con lo cual aquí deberemos comprobar que las relaciones son las de nuestra base de datos y si no es así modificarlas a mano o simplemente borrar los vínculos que será lo que hagamos en este caso para simplificar el ejemplo. Cuando le demos a borrar vínculos nos saldrá una ventana de advertencia le daremos que si y a continuación le damos a Siguiente y nos saldrá una nueva advertencia a la cual le daremos Aceptar.

 

 

            En la nueva ventana del asistente que se nos abre escogeremos los campos de cada una de las tablas que queremos que sean mostrados en nuestro informe.

 

 

            Una vez llegados a este punto le daremos a Finalizar para terminar nuestro informe. Podemos seguir con el asistente para agrupar los datos por alguno de los campos, cambiar el estilo del informe y otras opciones que para este ejemplo no nos interesan.

            Una vez terminado el asistente nos aparecerá el informe en vista de diseño, el cual podremos retocar, cambiando el tipo de letra, tamaños, colocación de los campos etc. a nuestro gusto teniendo en cuenta varias cosas: el encabezado del informe sale solamente al principio del mismo, el encabezado de página sale al principio de cada página al igual que el pie de página y finalmente el pie de informe sale al final. Podemos añadir campos especiales como por ejemplo fecha de impresión, hora de impresión etc. escogiéndolos dentro del Explorador de Campos, si no tiene esta ventana la puede mostrar escogiendo Ver --> Otras ventanas --> Esquema del documento.

            Una vez arreglado a gusto tendremos listo el informe, que presentará una apariencia similar al realizado para este ejemplo.

 

            Tenemos así lista la primera de las dos partes necesarias para generar informes en .NET. Ahora crearemos un formulario para mostrar el informe realizado con lo cual al igual que anteriormente en el explorador de soluciones sobre el proyecto botón secundario  --> Agregar --> Agregar Windows Form … le ponemos de nombre “VisorDeInformes.cs” en este caso por que lo realizaremos sobre C# pero podremos hacerlo sobre cualquiera de los lenguajes soportados por la plataforma.

 

 

            Una vez le demos a Abrir se nos abrirá el formulario en vista de diseño, ajustamos el tamaño a gusto y a continuación en el cuadro de herramientas, normalmente esta situado el último de los elementos, pulsamos sobre CrystalReportsViewer y sin soltar arrastramos al formulario.

 

            Lo ajustamos al tamaño del formulario y lo tenemos listo para trabajar con el.

 

 

            Una vez llegados a este punto solamente nos falta la parte de programación para que nuestro informe pueda ser visualizado. Existen muchas maneras de hacer lo que vamos a hacer ahora, asignar al visor el informe echo anteriormente y dentro de este escoger los datos que queremos que salgan en el informe, en este ejemplo lo haremos todo por código, pero ya digo que se podría hacer de muchas otras maneras.

            Para ello comenzaremos por el constructor del visor para ello con el formulario VisorDeInformes abierto vamos a Ver --> Código o bien en el Explorador de soluciones sobre el formulario botón secundario Ver Código.

Una vez se nos habrá el código vamos al constructor que presentará esta apariencia:

 

      public VisorDeInformes()
      {
            //
            // Necesario para admitir el Diseñador de Windows Forms
            //
            InitializeComponent();
            //
           
// TODO: agregar código de constructor después de llamar a InitializeComponent
            //
      }

 

En este punto aclararemos que aunque el informe este realizado en vista de diseño, por detrás .NET crea una clase con el mismo nombre dado al informe, la cual no podemos ver ni tocar, por lo menos yo no sé, pero que si podemos utilizar. Con lo cual lo que haremos ahora dentro del constructor declararemos e instanciaremos un objeto de la mencionada clase y le asignaremos ese informe al CrytalReportViewer como informe, quedando de la siguiente manera:

 public VisorDeInformes()
           {
            //
            // Necesario para admitir el Diseñador de Windows Forms
            //
            InitializeComponent();
            Informe informe = new Informe();
            crystalReportViewer1.ReportSource = informe;        
          
}

 

            Por último solamente nos falta seleccionar los datos que queremos mostrar en el informe es decir asignarle una especie de consulta select  sql para filtrar los datos. Se hace mediante la  propiedad “SelectionFormula” del CrytalReportViewer donde establecemos las condiciones que debe seguir el informe al ser mostrado, por ejemplo en este caso queremos que nos enseñe los datos especificados en el informe que tengan como paciente el indicado y como número de consulta también el indicado. Aquí es donde podemos pasarle parámetros a ese informe por ejemplo si queremos pasarle el código del paciente o de la consulta se la pasaremos como argumentos en el constructor, lo que se puede hacer es pasarle como parámetro una cadena la cual realizamos donde llamemos al VisorDeInformes para no depender del número de parámetros que le queremos pasar. Lo que se debe de cumplir es que el nombre del campo de la base de datos este entre corchetes. Quedando finalmente el constructor como sigue:

           public VisorDeInformes()
          {
            //
            // Necesario para admitir el Diseñador de Windows Forms
            //
            InitializeComponent();
            Informe informe = new Informe();
            crystalReportViewer1.ReportSource = informe;         
            crystalReportViewer1.SelectionFormula = "{paciente.p_codigo} =" + codigoPaciente +
            
" AND {consulta.c_codigo} =" + codigoConsulta;
          }

 

            Si lo hacemos con parámetros pasados como una cadena quedaría de la siguiente forma:

          public VisorDeInformes(string cadenaSelect)
          {
            //
            // Necesario para admitir el Diseñador de Windows Forms
            //
            InitializeComponent();
            Informe informe = new Informe();
            crystalReportViewer1.ReportSource = informe; 
           
crystalReportViewer1.SelectionFormula = cadenaSelect;
          }

 

El valor de cadena podría ser por ejemplo:

cadenaSelect = "{paciente.p_codigo}=11 AND {consulta.c_codigo}=21";

 

            Y ya tenemos listos tanto el informe como el visor lo único que nos falta es mostrarlo para ello en donde queramos lo que debemos hacer es declarar e instanciar un VisorDeInformes por ejemplo en nuestra clase Principal en el evento Clic de un botón pondríamos:

 

private void BInforme_Click(object sender, System.EventArgs e)
{
      try
      {                                                         
            VisorDeInformes visor = new VisorDeInformes);
            visor.ShowDialog(this);
      }

      catch(Exception ex)
      {
            MessageBox.Show(ex.Message, Excepcion);
      }
}

            Probamos y si todo ha salido bien nos debería de aparecer el visor con el informe y los datos seleccionados.

 

 

            Problemas conocidos:

            Si el path de la base de datos es muy grande, más de 255 caracteres se produce una excepción por buffer insuficiente.

            En el momento en que se cambie de sitio la base de datos, en este ejemplo el archivo de ACCESS, el informe no encontrara la misma y lanzará una excepción.

            Si se esta probando el proyecto en modo debug y pasamos a modo release para terminar la aplicación habrá que tener en cuenta este cambio en el path de la base de datos.



 


ir al índice