jueves, 26 de enero de 2012

Crystal Reports – Parameters – Como asignarlos desde código .net


Introducción
Un problema frecuente cuando se usa Crystal Reports es el pasaje de información por medio de parámetros al reporte.
El uso de parámetros es un aspecto importante para la creación de reportes, y suele suceder que no es tan intuitiva, ni directa la forma en como se debe programar esta funcionalidad.
Definición del parámetro en Crystal
En este ejemplo se usara el parámetro como filtro de los datos del reporte, por lo tanto se creara en el mismo momento en que se define la información.
Para esto se usara la opción “DataBase Expert”:

En el cuadro de dialogo que se despliega, se deber crear una nueva conexión a la base de datos Access usada en el reporte:

Haciendo uso en este cuadro, no directamente la tabla mostrada, sino la opción “Add Command”, la cual permitirá definir una consulta personalizada.
Es por eso que desplegara el cuadro:

Y se definirá un parámetro mediante la opción de la derecha.
Solo queda definir la consulta, haciendo uso del parámetro:

Seguramente cuando se acepte el dialogo, mostrara el mensaje pidiendo el ingreso de un valor al parámetro creado, se puede ingresar un valor cualquiera, o simplemente aceptar.

En cualquier momento la consulta escrita podrá ser modificada.

Luego de arrastrar los campos al diseñador del Crystal, podría visualizarse algo como lo siguiente:

En el “Field Explorer” se puede inspeccionar tanto los campos de la consulta, como los parámetros definidos para el reporte.
Pasaje de parámetros desde código
Al momento de ejecutar la aplicación será necesario pasarle al reporte desde el código el filtro que se ha definido, sino se hace seguramente el propio Crystal desplegara un cuadro pidiendo el ingreso de un valor.
En el siguiente código se muestra como llevar a cabo esta operación:

01.private void Form1_Load(object sender, EventArgs e)
02.{
03. 
04.//
05.// Creo el parametro y asigno el nombre
06.//
07.ParameterField param = new ParameterField();
08.param.ParameterFieldName = "CargoParam";
09. 
10.//
11.// creo el valor que se asignara al parametro
12.//
13.ParameterDiscreteValue discreteValue = new ParameterDiscreteValue();
14.discreteValue.Value = "Developer";
15.param.CurrentValues.Add(discreteValue);
16. 
17.//
18.// Asigno el paramametro a la coleccion
19.//
20.ParameterFields paramFiels = new ParameterFields();
21.paramFiels.Add(param);
22. 
23.//
24.// Asigno la coleccion de parametros al Crystal Viewer
25.//
26.crystalReportViewer1.ParameterFieldInfo = paramFiels;
27. 
28.//
29.// Creo la instancia del reporte
30.//
31.crListado report = new crListado();
32. 
33.//
34.// Cambio el path de la base de datos
35.//
36.string rutadb = Path.Combine(Application.StartupPath, "TestDb.mdb");
37.report.DataSourceConnections[0].SetConnection("", rutadb, false);
38. 
39.//
40.// Asigno el reporte a visor
41.//
42.crystalReportViewer1.ReportSource = report;
43. 
44.}

[C#]
[VB.NET]

No hay comentarios:

Publicar un comentario