Transcript
Page 1: Tutoriales y Codigo de Ejemplo Crystal Reports

Tutoriales y código de ejemplo Cristal Reports

Esta sección presenta una gran selección de tutoriales que permite trabajar con Crystal Reports para Visual Studio 2005. Cada tutorial le guía paso a paso en todo el proceso de creación de proyectos que proporciona soluciones para una serie de casos de elaboración de informes.

Se recomienda realizar varios de los tutoriales para familiarizarse con los métodos prácticos de trabajo en de trabajo en Crystal Reports para Visual Studio 2005.

Cada tutorial va acompañado de proyectos de código de ejemplo que muestran la versión finalizada del proyecto, escrita en C# y Visual Basic. La mayoría de estos proyectos se facilitan como sitios Web y proyectos para Windows, excepto los diseñados específicamente para utilizarse sólo en la Web o sólo en Windows.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Código de ejemplo• Tutoriales del modelo de objeto CrystalReportViewer• Tutoriales del modelo de objetos ReportDocument• Tutoriales de código reducido en Visual Studio 2005• Tutoriales de conectividad de datos• Otros tutoriales

Código de ejemplo

Los códigos de ejemplo son proyectos finalizados basados en las instrucciones facilitadas en los tutoriales. Para reproducir el código de ejemplo, deberá seguir los procedimientos de los tutoriales.

Cada tutorial va acompañado de proyectos de código de ejemplo de C# y Visual Basic que muestran la versión finalizada del proyecto. La mayoría de estos proyectos se facilitan como sitios Web y proyectos para Windows, excepto los diseñados específicamente para utilizarse sólo en la Web o sólo en Windows.

En Crystal Reports para Visual Studio 2005, el código de ejemplo se instala cuando se ejecuta el archivo de instalación TutorialsSampleCodeProjects.msi. Para ubicar el archivo de instalación, vea Directorio de código de ejemplo de los tutoriales.

Modelo de objetos CrystalReportViewer

Nombre del tutorial Nombre de la carpeta del código de ejemplo

Conectar con una base de datos segura de SQL

Server

Sitio Web en C#: CS_Web_CRVObjMod_DBLogon

Proyecto para Windows en C#:

CS_Win_CRVObjMod_DBLogon

Sitio Web en Visual Basic:

VB_Web_CRVObjMod_DBLogon

Proyecto para Windows en Visual Basic:

VB_Win_CRVObjMod_DBLogon

Leer y configurar parámetros discretos Sitio Web en C#: CS_Web_CRVObjMod_Parameters

Proyecto para Windows en C#:

Page 2: Tutoriales y Codigo de Ejemplo Crystal Reports

CS_Win_CRVObjMod_Parameters

Sitio Web en Visual Basic:

VB_Web_CRVObjMod_Parameters

Proyecto para Windows en Visual Basic:

VB_Win_CRVObjMod_Parameters

Leer y configurar parámetros de rango para un

subinforme

Sitio Web en C#:

CS_Web_CRVObjMod_ParametersSubrpt

Proyecto para Windows en C#:

CS_Win_CRVObjMod_ParametersSubrpt

Sitio Web en Visual Basic:

VB_Web_CRVObjMod_ParametersSubrpt

Proyecto para Windows en Visual Basic:

VB_Win_CRVObjMod_ParametersSubrpt

Filtrar datos con fórmulas de selección Sitio Web en C#: CS_Web_CRVObjMod_FilteringData

Proyecto para Windows en C#:

CS_Win_CRVObjMod_FilteringData

Sitio Web en Visual Basic:

VB_Web_CRVObjMod_FilteringData

Proyecto para Windows en Visual Basic:

VB_Win_CRVObjMod_FilteringData

Personalizar el control CrystalReportViewer Sitio Web en C#:

CS_Web_CRVObjMod_CustomizeViewer

Proyecto para Windows en C#:

CS_Win_CRVObjMod_CustomizeViewer

Sitio Web en Visual Basic:

VB_Web_CRVObjMod_CustomizeViewer

Proyecto para Windows en Visual Basic:

VB_Win_CRVObjMod_CustomizeViewer

Modelo de objetos ReportDocument

Nombre del tutorial Archivo de código de ejemplo

Almacenar el modelo de objetos ReportDocument Sitio Web en C#: CS_Web_RDObjMod_Session

Page 3: Tutoriales y Codigo de Ejemplo Crystal Reports

utilizando SessionSitio Web en Visual Basic:

VB_Web_RDObjMod_Session

Conectar con una base de datos segura de SQL

Server utilizando Autenticación de SQL

Sitio Web en C#: CS_Web_RDObjMod_DBLogon

Proyecto para Windows en C#:

CS_Win_RDObjMod_DBLogon

Sitio Web en Visual Basic:

VB_Web_RDObjMod_DBLogon

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_DBLogon

Conectar con una base de datos segura de SQL

Server utilizando Seguridad integrada

Sitio Web en C#:

CS_Web_RDObjMod_DBLogonIntegratedSecurity

Proyecto para Windows en C#:

CS_Win_RDObjMod_DBLogonIntegratedSecurity

Sitio Web en Visual Basic:

VB_Web_RDObjMod_DBLogonIntegratedSecurity

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_DBLogonIntegratedSecurity

Conectar con una base de datos segura de SQL

Server con un subinforme

Sitio Web en C#:

CS_Web_RDObjMod_DBLogonSubrpt

Proyecto para Windows en C#:

CS_Win_RDObjMod_DBLogonSubrpt

Sitio Web en Visual Basic:

VB_Web_RDObjMod_DBLogonSubrpt

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_DBLogonSubrpt

Leer y configurar parámetros discretos Sitio Web en C#: CS_Web_RDObjMod_Parameters

Proyecto para Windows en C#:

CS_Win_RDObjMod_Parameters

Sitio Web en Visual Basic:

VB_Web_RDObjMod_Parameters

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_Parameters

Page 4: Tutoriales y Codigo de Ejemplo Crystal Reports

Leer y configurar parámetros con un subinforme Sitio Web en C#:

CS_Web_RDObjMod_ParametersSubrpt

Proyecto para Windows en C#:

CS_Win_RDObjMod_ParametersSubrpt

Sitio Web en Visual Basic:

VB_Web_RDObjMod_ParametersSubrpt

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_ParametersSubrpt

Exportar a varios formatos Sitio Web en C#: CS_Web_RDObjMod_Export

Proyecto para Windows en C#:

CS_Win_RDObjMod_Export

Sitio Web en Visual Basic:

VB_Web_RDObjMod_Export

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_Export

Imprimir y configurar opciones de impresión Sitio Web en C#:

CS_Web_RDObjMod_SetPrintOptions

Proyecto para Windows en C#:

CS_Win_RDObjMod_SetPrintOptions

Sitio Web en Visual Basic:

VB_Web_RDObjMod_SetPrintOptions

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_SetPrintOptions

Filtrar datos con fórmulas de selección Sitio Web en C#: CS_Web_RDObjMod_FilteringData

Proyecto para Windows en C#:

CS_Win_RDObjMod_FilteringData

Sitio Web en Visual Basic:

VB_Web_RDObjMod_FilteringData

Proyecto para Windows en Visual Basic:

VB_Win_RDObjMod_FilteringData

Presentación de elementos de informes con el

control CrystalReportViewer

Sitio Web en C#: CS_Web_RDObjMod_ReportParts

Sitio Web en Visual Basic:

Page 5: Tutoriales y Codigo de Ejemplo Crystal Reports

VB_Web_RDObjMod_ReportParts

Tutoriales de código reducido en Visual Studio 2005

Nombre del tutorial Archivo de código de ejemplo

Configuración de sitios Web de código reducido con

Crystal Reports mediante tareas inteligentes

Sitio Web en C#:

CS_Web_ReducedCode_WebSiteSetup

Sitio Web en Visual Basic:

VB_Web_ReducedCode_WebSiteSetup

Configuración de proyectos de Windows de código

reducido con Crystal Reports mediante tareas

inteligentes

Proyecto para Windows en C#:

CS_Win_ReducedCode_ProjectSetup

Proyecto para Windows en Visual Basic:

VB_Win_ReducedCode_ProjectSetup

Conexión de base de datos segura de código

reducido en un sitio Web

Sitio Web en C#: CS_Web_ReducedCode_DBLogon

Sitio Web en Visual Basic:

VB_Web_ReducedCode_DBLogon

Configurar los parámetros de código reducido en

un sitio Web

Sitio Web en C#:

CS_Web_ReducedCode_Parameters

Sitio Web en Visual Basic:

VB_Web_ReducedCode_Parameters

Datos de informes de código reducido a otros

controles en un sitio Web

Sitio Web en C#: CS_Web_ReducedCode_ReportData

Sitio Web en Visual Basic:

VB_Web_ReducedCode_ReportData

Datos de informes de código reducido a otros

controles en una aplicación Windows

Aplicación Windows en C#:

CS_Win_ReducedCode_ReportData

Aplicación para Windows en Visual Basic:

VB_Win_ReducedCode_ReportData

Conectividad de datos

Nombre del tutorial Nombre de la carpeta del código de ejemplo

Crear DataSets ADO.NET conectarse a ellos Sitio Web en C#: CS_Web_Data_DataSets

Proyecto para Windows en C#:

CS_Win_Data_DataSets

Sitio Web en Visual Basic: VB_Web_Data_DataSets

Page 6: Tutoriales y Codigo de Ejemplo Crystal Reports

Proyecto para Windows en Visual Basic:

VB_Win_Data_DataSets

Conectar a métodos IDataReader Sitio Web en C#: CS_Web_Data_IDataReader

Proyecto para Windows en C#:

CS_Win_Data_IDataReader

Sitio Web en Visual Basic:

VB_Web_Data_IDataReader

Proyecto para Windows en Visual Basic:

VB_Win_Data_IDataReader

Conectar a colecciones de objetos Sitio Web en C#: CS_Web_Data_ObjectCollection

Sitio Web en Visual Basic:

VB_Web_Data_ObjectCollection

Otros tutoriales

Nombre del tutorial Nombre de la carpeta del código de ejemplo

Configurar la compatibilidad con clientes

multilingües

Sitio Web en C#: CS_Web_Multilingual

Proyecto para Windows en C#: CS_Win_Multilingual

Sitio Web en Visual Basic: VB_Web_Multilingual

Proyecto para Windows en Visual Basic:

VB_Win_Multilingual

Crear una biblioteca de funciones del usuario Biblioteca de clases de C#:

CRUFL_CS_ExchangeRate

Biblioteca de clases de VB:

CRUFL_VB_ExchangeRate

Tutorial: Rellenar una lista desplegable de informes

desde el directorio de archivos

Sitio Web en C#: CS_Web_DrpFileDir

Sitio Web en VB: VB_Web_DrpFileDir

Tutorial: Rellenar una lista desplegable de informes

desde un servicio Web

Sitio Web en C#: CS_Web_WebService

Sitio Web en VB: VB_Web_WebService

Tutoriales del modelo de objeto CrystalReportViewer

Page 7: Tutoriales y Codigo de Ejemplo Crystal Reports

Los tutoriales de esta sección utilizan los métodos y las propiedades de la clase CrystalReportViewer y las clases del espacio de nombres CrystalDecisions.Shared.

Nota Si desea hacer referencia al diagrama del modelo de objetos CrystalReportViewer al realizar estos tutoriales, vea Diagrama del modelo de objetos.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Conectar con una base de datos segura de SQL Server• Leer y configurar parámetros discretos• Leer y configurar parámetros de rango para un subinforme• Filtrar datos con fórmulas de selección• Personalizar el control CrystalReportViewer

Tutorial: Conectar con una base de datos segura de SQL Server

En este tutorial, aprenderá a agregar código de conexión para mostrar un informe que contiene información de una base de datos segura de SQL Server.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Introducción• Crear un informe conectado a una base de datos segura de SQL Server• Enlazar el informe sin código de conexión• Agregar el código de conexión del informe• Agregar la posibilidad de cambiar la ubicación de la base de datos en tiempo de ejecución• Conclusión

Introducción

Cuando utilice el modelo de objetos CrystalReportViewer para conectar con una base de datos segura de SQL Server, debe usar clases del espacio de nombres CrystalDecisions.Shared.

Las propiedades de la clase ConnectionInfo se utilizan para conectar con el servidor de base de datos u otros orígenes de datos ODBC. En este tutorial, establecerá las propiedades ServerName, DatabaseName, UserID y Password. Si decide establecer únicamente las propiedades DatabaseName, UserID y Password, se conectará con el servidor predeterminado de la base de datos especificada en el informe. Sin embargo, si elige asignar una propiedad ServerName alternativa, podrá redirigir el informe a un servidor diferente en tiempo de ejecución.

Obtendrá la instancia de TableLogOnInfos de la propiedad LogOnInfo del control CrystalReportViewer. A continuación, asignará la instancia de ConnectionInfo a cada objeto TableLogOnInfo de la instancia de TableLogOnInfos.

El código de conexión de este tutorial también funciona para los subinformes insertados en el informe principal. Para el modelo de objetos ReportDocument, debe modificar el código con el fin de que funcione para los subinformes (vea Conectar con una base de datos segura de SQL Server con un subinforme).

Para realizar este tutorial mediante el modelo de objetos ReportDocument, vea Conectar con una base de datos segura de SQL Server mediante el modelo de objetos ReportDocument. El modelo de objetos ReportDocument se recomienda con respecto al modelo de objetos CrystalReportViewer. Para obtener más información sobre el modelo de objetos que se debe utilizar, vea ¿Cuál es el modelo de objetos que se debe utilizar?.

Continúe con Crear un informe conectado a una base de datos segura de SQL Server.

Page 8: Tutoriales y Codigo de Ejemplo Crystal Reports

Crear un informe conectado a una base de datos segura de SQL Server

Para comenzar, cree un informe que obtenga su información de la base de datos Northwind.

Nota Northwind es una base de datos de muestra que se proporciona con SQL Server.

Este tutorial requiere que se configuren algunos parámetros como requisito previo.

Requisitos previos de configuración de la base de datos

1. Configuración de SQL Server: • Si tiene instalado SQL Server (o la versión OEM, MSDE), debe configurarse de modo que

requiera la Autenticación de SQL Server.• Si no tiene instalado SQL Server (ni la versión OEM, MSDE), debe instalar MSDE con la

autenticación de SQL Server establecida en "True".2. La base de datos Northwind incluida con SQL Server se debe instalar y verificar que requiere la

Autenticación de SQL Server.3. Se debe crear una cuenta de acceso limitado para utilizase dentro del sitio Web.

Para instalar MSDE con la autenticación de SQL Server, o la base de datos Northwind, vaya a las siguientes secciones de Configuración del sistema de esta documentación:

• Instalación de MSDE con autenticación de Windows o SQL Server• Instalación de la base de datos Northwind• Seguridad: Crear una cuenta de acceso limitado a la base de datos

Una vez configurados SQL Server y la base de datos Northwind de acuerdo a las secciones anteriores, ya podrá crear un informe que obtenga su información de la base de datos Northwind de forma segura.

Para crear un informe con datos seguros de la base de datos Northwind

Nota Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La Configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, y éste no se podrá completar sin dicha configuración. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.

1. En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita, elija Agregar y, a continuación, haga clic en Agregar nuevo elemento.

2. En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.

3. En el campo Nombre, escriba "NorthwindCustomers.rpt" y, a continuación, haga clic en Abrir.

Nota Si aún no se ha registrado, se le puede pedir que se registre. Para saber cómo registrarse, vea Registro y código de clave de Crystal Reports.

4. En el panel Crear un nuevo documento de Crystal Report del cuadro de diálogo Galería de Crystal Report, seleccione Usar asistente de informes.

5. En el panel Elegir un Asistente, seleccione Estándar. Haga clic en Aceptar.

Aparecerá la ventana Asistente para la creación de informes estándar.

6. En el panel Orígenes de datos disponibles, expanda la carpeta Crear nueva conexión.7. En la subcarpeta que se abre, expanda la carpeta OLE DB (ADO).

Page 9: Tutoriales y Codigo de Ejemplo Crystal Reports

Aparecerá la ventana OLE DB (ADO).

8. Seleccione Proveedor de OLE DB Microsoft para SQL Server y, a continuación, haga clic en Siguiente.

9. Especifique los valores del servidor de base de datos, el id. de usuario y la contraseña en los campos Servidor, Id. de usuario y Contraseña.

10. En la lista desplegable Base de datos, seleccione "Northwind".

Deje desactivada la casilla de verificación Seguridad integrada porque está usando la autenticación de SQL Server en lugar de la autenticación de NT.

11. Haga clic en Finalizar.

Ahora se expandirá la carpeta OLE DB, mostrando el servidor de base de datos y, dentro de él, la base de datos Northwind.

12. Expanda los nodos Northwind, dbo y Tablas, y seleccione la tabla Clientes.13. Haga clic en el símbolo > para mover la tabla al panel Tablas seleccionadas y, a continuación,

haga clic en Siguiente.14. Expanda la tabla Clientes y, a continuación, mantenga presionada la tecla Ctrl mientras hace

clic en CompanyName, ContactName y City.15. Haga clic en el símbolo > para mover estos campos al panel Campos para mostrar y, a

continuación, haga clic en Siguiente.16. En el panel Campos disponibles, en Campos del informe, seleccione Clientes.Ciudad, haga

clic en el símbolo > para mover el campo al panel Agrupar por y, a continuación, haga clic en Finalizar.

Se creará el informe NorthwindCustomers y se cargará en la ventana principal de Visual Studio.

Ahora ya podrá enlazar el informe con el control CrystalReportViewer.

Continúe con Enlazar el informe sin código de conexión.

Enlazar el informe sin código de conexión

En Configuración de proyectos, ha colocado un control CrystalReportViewer en el formulario Web Forms o Windows Forms. En el paso anterior, ha agregado un informe NorthwindCustomers al proyecto.

En esta sección enlazará la ruta de directorio de archivos del informe NorthwindCustomers al control CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se ha establecido el código de conexión.

Para enlazar la ruta de directorio de archivos del informe NorthwindCustomers al control CrystalReportViewer

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código.3. Busque el método ConfigureCrystalReports(), que ha creado en Configuración de proyectos.4. Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al

informe local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:

Page 10: Tutoriales y Codigo de Ejemplo Crystal Reports

• Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena en el método Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco duro en tiempo de ejecución.

[Visual Basic]

Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt")

[C#]

string reportPath = Server.MapPath("NorthwindCustomers.rpt");

• Para un proyecto para Windows, concatene la propiedad Application.StartupPath con una barra invertida y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo ejecutable de Windows.

Nota En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.

[Visual Basic]

Dim reportPath As String = Application.StartupPath & "\" & "NorthwindCustomers.rpt"

[C#]

string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt";

5. Asigne la ruta del directorio de archivos del informe NorthwindCustomers a la propiedad ReportSource del control CrystalReportViewer.

[Visual Basic]

myCrystalReportViewer.ReportSource = reportPath

[C#]

crystalReportViewer.ReportSource = reportPath;

Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se ha escrito el código para conectarse con la base de datos.

Para probar la carga del informe NorthwindCustomers

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. Si usa un informe no incrustado en un proyecto para Windows, localice el archivo ejecutable de

Windows compilado en el subdirectorio \bin\debug\y, a continuación, copie el informe en dicho subdirectorio.

Nota Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.

4. En el menú Depurar, haga clic en Iniciar.

Page 11: Tutoriales y Codigo de Ejemplo Crystal Reports

Nota Si está desarrollando un sitio Web en Visual Studio 2005 y es la primera vez que ha iniciado la depuración, aparecerá un cuadro de diálogo en el que se indica que el archivo Web.config se debe modificar. Haga clic en el botón Aceptar para habilitar la depuración.

No se mostrará el informe NorthwindCustomers. Se mostrará después de agregar el código de conexión con la base de datos.

Nota Los resultados pueden variar, según la versión de Crystal Reports que utilice. Por ejemplo, si tiene instalado Crystal Reports 10 o una versión superior, se le pedirá información de conexión a la base de datos para ese informe. Esta es una nueva función de Crystal Reports Developer y Crystal Reports para Visual Studio 2005. Si ejecuta una versión anterior de Crystal Reports, se produce una excepción. En cualquier caso, debe seguir el siguiente procedimiento de pasos para crear una aplicación totalmente funcional.

5. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Agregar el código de conexión del informe.

Agregar el código de conexión del informe

Ahora estará preparado para agregar el código de conexión del informe a la clase de código subyacente. Va a empezar por crear un método de ayuda privado, SetDBLogonForReport().

Para crear y codificar el método SetDBLogonForReport()

1. Regrese a la clase de código subyacente de este Web Forms o Windows Forms.2. En la parte inferior de la clase, cree un nuevo método privado denominado

SetDBLogonForReport() con ConnectionInfo pasado en la firma de método.

[Visual Basic]

Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo)

End Sub

[C#]

private void SetDBLogonForReport(ConnectionInfo connectionInfo){}

3. Con este método, se obtiene la instancia de TableLogOnInfos de la propiedad LogOnInfo de la clase CrystalReportViewer.

Nota Para que la clase TableLogOnInfos sea accesible, incluya una instrucción "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de código lateral del espacio de nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos.)

TableLogOnInfos es una clase indizada que contiene instancias de la clase TableLogOnInfo.

[Visual Basic]

Dim myTableLogOnInfos As TableLogOnInfos = myCrystalReportViewer.LogOnInfo

Page 12: Tutoriales y Codigo de Ejemplo Crystal Reports

[C#]

TableLogOnInfos tableLogOnInfos = crystalReportViewer.LogOnInfo;

4. Cree un bucle foreach que recorra cada instancia de TableLogOnInfo de la instancia de clase de índice de TableLogOnInfos.

[Visual Basic]

For Each myTableLogOnInfo As TableLogOnInfo In myTableLogOnInfos

Next

[C#]

foreach(TableLogOnInfo tableLogOnInfo in tableLogOnInfos){}

5. En el bucle foreach, establezca la propiedad ConnectionInfo de TableLogOnInfo en el parámetro ConnectionInfo.

[Visual Basic]

myTableLogOnInfo.ConnectionInfo = myConnectionInfo

[C#]

tableLogOnInfo.ConnectionInfo = connectionInfo;

El procedimiento de este paso ha creado un método para establecer la conexión de la base de datos. Sin embargo, debe modificar el método ConfigureCrystalReports() para direccionar este método, con el fin de que el informe sepa que tiene información sobre conexión de base de datos.

La modificación del método ConfigureCrystalReports() requiere dos acciones:

• Configurar la instancia de ConnectionInfo.• Llamar al método SetDBLogonForReport().

Para modificar el método ConfigureCrystalReports() para direccionar el código de conexión con la base de datos

1. En el método ConfigureCrystalReports(), agregue un par de saltos de línea en el código sobre la línea que enlaza el informe al control CrystalReportViewer.

2. En los saltos de línea, declare y cree una instancia de la clase ConnectionInfo.

[Visual Basic]

Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()

[C#]

ConnectionInfo connectionInfo = new ConnectionInfo();

3. Establezca las propiedades DatabaseName, UserID y Password de la instancia de ConnectionInfo.

Page 13: Tutoriales y Codigo de Ejemplo Crystal Reports

Nota Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso limitado. Para obtener más información, véase Seguridad: Crear una cuenta de acceso limitado a la base de datos.

En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia contraseña.

[Visual Basic]

myConnectionInfo.DatabaseName = "Northwind"myConnectionInfo.UserID = "limitedPermissionAccount"myConnectionInfo.Password = "1234"

[C#]

connectionInfo.DatabaseName = "Northwind";connectionInfo.UserID = "limitedPermissionAccount";connectionInfo.Password = "1234";

4. Debajo del código que enlaza el control CrystalReportViewer, llame al método SetDBLogonForReport() y pásele la instancia de ConnectionInfo.

[Visual Basic]

SetDBLogonForReport(myConnectionInfo)

[C#]

SetDBLogonForReport(connectionInfo);

Ahora estará listo para crear y ejecutar el proyecto. El informe se debe cargar correctamente, ya que ha agregado código para conectar con la base de datos.

Para probar la carga del informe NorthwindCustomers

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

El informe NorthwindCustomers se mostrará correctamente.

4. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

En la siguiente sección, aprenderá a cambiar la ubicación de la base de datos en tiempo de ejecución.

Continúe con Agregar la posibilidad de cambiar la ubicación de la base de datos en tiempo de ejecución.

Agregar la posibilidad de cambiar la ubicación de la base de datos en tiempo de ejecución

En esta sección, aprenderá a cambiar la ubicación de la base de datos en tiempo de ejecución. Sólo requiere una pequeña modificación de la instancia de ConnectionInfo.

Para cambiar la ubicación de la base de datos en tiempo de ejecución

Page 14: Tutoriales y Codigo de Ejemplo Crystal Reports

1. En el método ConfigureCrystalReports(), cree un par de saltos de línea en el código detrás de la línea que declara y crea una instancia de la clase ConnectionInfo.

2. En los saltos de línea, establezca la propiedad ServerName de la instancia de ConnectionInfo.

Nota En el código que escriba, reemplace el nombre del servidor de ejemplo DevDatabase (que aparece más abajo) por el nombre de su servidor.

[Visual Basic]

myConnectionInfo.ServerName = "DevDatabase"

[C#]

connectionInfo.ServerName = "DevDatabase";

Ahora estará listo para crear y ejecutar el proyecto. El informe se debe redirigir al servidor de base de datos alternativo en tiempo de ejecución.

Para probar si el informe se puede restablecer a un servidor de base de datos alternativo en tiempo de ejecución

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

El informe NorthwindCustomers se mostrará correctamente.

4. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Conclusión.

Conclusión

Ha configurado correctamente el código para conectar con la base de datos de SQL Server y cambiar la ubicación de la base de datos en tiempo de ejecución.

Cuando pueda agregar subinformes al informe principal (NorthwindCustomers.rpt), no necesita código adicional.

Tutorial: Leer y configurar parámetros discretos

En este tutorial aprenderá a crear un informe cuyos datos se puedan filtrar basándose en un parámetro discreto.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Introducción• Crear un informe con parámetros

Page 15: Tutoriales y Codigo de Ejemplo Crystal Reports

• Enlazar el informe• Configurar parámetros manualmente en el código• Crear un control ListBox que muestre los parámetros predeterminados• Configurar parámetros a partir de las selecciones de ListBox• Configurar la persistencia de parámetros• Conclusión• Información de código de ejemplo

Introducción

Un parámetro discreto es un único valor, a diferencia de un parámetro de rango, que hace referencia a un rango de valores. A los elementos de texto (como ciudades) se tiene acceso normalmente mediante parámetros discretos. A los elementos numéricos(como sueldos de empleados) se suele acceder mediante parámetros de rango.

En este tutorial establecerá un valor de un parámetro discreto para ver un informe de clientes basado en un solo campo. El informe muestra únicamente los clientes que viven en las ciudades seleccionadas en una lista de ciudades. La lista de ciudades proviene de los valores predeterminados del parámetro de ciudad. Dichos valores predeterminados del parámetro de ciudad se encapsulan dentro del informe.

Para empezar, va a crear un informe de clientes con un parámetro de ciudad. Los datos del informe proceden de la base de datos de muestra incluida en Crystal Reports para Visual Studio. Al crear una instancia del informe en el código, generará un ArrayList que contiene nombres de ciudades (París, Tokio) y pasará dicha instancia de ArrayList a un método de ayuda que establezca estos nombres como los valores actuales del parámetro de ciudad. A continuación, enlazará el informe al control CrystalReportViewer y verá el informe que mostrará únicamente los clientes que vivan en París y Tokio.

En la siguiente parte del tutorial, realizará las siguientes acciones:

• Crear un método que obtenga todos los valores predeterminados y los devuelva en un ArrayList. • Agregar un control ListBox al formulario y rellenarlo a partir de ArrayList.• Agregar un control Button para volver a mostrar el informe basado en las selecciones de ListBox.

En la parte final del tutorial, codificará el evento de clic de botón para obtener los elementos seleccionados en el control ListBox y establecerlos para que sean los valores actuales del parámetro de ciudad. El informe se volverá a mostrar incluyendo únicamente los clientes que vivan en las ciudades seleccionadas en el control ListBox.

Este tutorial también se puede realizar con clases del modelo de objetos ReportDocument; vea Leer y configurar parámetros discretos mediante el modelo de objetos ReportDocument. Para obtener más información sobre el modelo de objetos que se debe utilizar, vea ¿Cuál es el modelo de objetos que se debe utilizar?.

Continúe con Crear un informe con parámetros.

Crear un informe con parámetros

Para empezar, cree un informe que obtenga su información de la base de datos de muestra de Microsoft Access que se incluye con Crystal Reports.

Nota Xtreme.mdb es la base de datos de muestra incluida con Crystal Reports. Para localizar el archivo xtreme.mdb correspondiente a su versión de Crystal Reports en el disco duro, vea Ubicación de la base de datos de ejemplo Xtreme. Tiene que conectarse a la base de datos a través de su entrada ODBC DSN. Para saber el nombre de esta entrada según su versión de Crystal Reports, vea Entrada ODBC DSN para la base de datos de ejemplo Xtreme.

Page 16: Tutoriales y Codigo de Ejemplo Crystal Reports

Para crear un informe con parámetros

Nota Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La Configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, y éste no se podrá completar sin dicha configuración. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.

1. En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita, elija Agregar y, a continuación, haga clic en Agregar nuevo elemento.

2. En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.

3. En el campo Nombre, escriba el nombre "CustomersByCity.rpt" y haga clic en Agregar.

Nota En Visual Studio .NET 2002 o 2003, el botón se denomina Abrir.

Si no se ha registrado anteriormente, se le pedirá que se registre. Para saber cómo registrarse, vea Registro y código de clave de Crystal Reports.

4. En el panel Crear un nuevo documento de Crystal Report del cuadro de diálogo Galería de Crystal Report, seleccione Usar asistente de informes.

5. En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.6. En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de

informes estándar, expanda la carpeta Crear nueva conexión.

Nota En Visual Studio .NET 2002 o 2003, donde Crystal Reports no se ha actualizado a Crystal Reports Developer, no existe la carpeta Crear nueva conexión; el contenido se mostrará en el nivel superior.

7. En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).8. En la ventana ODBC (RDO), seleccione la entrada DSN de ODBC correcta para su versión de

Crystal Reports, como se explica en Entrada DSN de ODBC para la base de datos de ejemplo Xtreme y, a continuación, haga clic en Finalizar.

Se expandirá la carpeta ODBC (RDO) y mostrará la base de datos de ejemplo Xtreme.

9. Expanda el nodo Tablas, haga doble clic en la tabla Cliente para mover la tabla al panel Tablas seleccionadas y, a continuación, haga clic en Siguiente.

10. Expanda la tabla Cliente, mantenga presionada CTRL y haga clic en Nombre del cliente, Título del contacto, Dirección1, Apellido del contacto y Ciudad.

11. Haga clic en el símbolo > para mover estos campos en el panel Campos para mostrar y, a continuación, haga clic en el botón Siguiente.

12. En el panel Campos disponibles, en Campos del informe, haga doble clic en Cliente.Ciudad para mover el campo al panel Agrupar por y, a continuación, haga clic en el botón Finalizar.

Se creará el informe CustomersByCity y se cargará en la ventana principal de Visual Studio.

Ahora ya podrá agregar un parámetro denominado Ciudad y ocuparlo con valores predeterminados.

El Explorador de campos debe estar visible, porque proporciona acceso a las distintas funciones del informe, incluidos los parámetros. Para ver el Explorador de campos, en el menú Crystal Reports, haga clic en Explorador de campos.

Para agregar un parámetro Ciudad

Page 17: Tutoriales y Codigo de Ejemplo Crystal Reports

1. Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en Cambiar la vista del campo.

Nota Otro modo de ver el Explorador de campos es haciendo clic en Explorador de campos en el menú Crystal Reports.

2. En el Explorador de campos, haga clic con el botón derecho en Campos de parámetro y seleccione Nuevo...

3. En el cuadro de diálogo Crear campo de parámetro: • Defina el Nombre como "Ciudad".• Defina el Texto de solicitud como "Seleccione una o varias ciudades".• Establezca Tipo de valor en Cadena.• Seleccione Permitir valores múltiples.• Seleccione Valores discretos.• Haga clic en Valores predeterminados...

Nota En Visual Studio .NET 2002 o 2003 donde Crystal Reports no se ha actualizado a Crystal Reports Developer, este botón se denomina Establecer valores predeterminados.

4. En el cuadro de diálogo Establecer valores predeterminados: • Defina Examinar tabla como "Cliente".• Defina Examinar campo como "Ciudad".• Haga clic en >> (la doble flecha hacia la derecha) para mover toda la lista de ciudades a

la lista Valores predeterminados.5. Haga clic en Aceptar para cerrar el cuadro de diálogo Establecer valores predeterminados.6. Haga clic en Aceptar para cerrar el cuadro de diálogo Crear campo de parámetro.

Acaba de establecer los valores predeterminados para que contengan una amplia lista de ciudades. Posteriormente, en este tutorial, va a tener acceso a esta misma lista de valores predeterminados mediante programación, a través de la propiedad ParameterFieldInfo de la clase CrystalReportViewer.

Ahora va a utilizar el Asistente de selección para establecer una fórmula que conecte la columna de base de datos Ciudad con el campo de parámetro Ciudad creado recientemente.

Para conectar el parámetro Ciudad a la columna de base de datos Ciudad

1. En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.2. En el cuadro de diálogo Elegir campo, en Campos del informe, seleccione Cliente.Ciudad y,

a continuación, haga clic en Aceptar.3. En el cuadro de diálogo Asistente de selección, en la ficha Cliente.Ciudad, establezca la lista

desplegable como "es igual a".4. En la nueva lista desplegable que aparece a la derecha, seleccione la primera opción de la lista,

{?City} y, a continuación, haga clic en Aceptar.

Nota Esta selección, {?City}, es el parámetro Ciudad creado anteriormente.

5. Desde el menú Archivo, seleccione Guardar todo.

Ahora podrá enlazar el informe al control CrystalReportViewer y establecer el parámetro de ciudad con dos valores iniciales, París y Tokio.

Continúe con Enlazar el informe.

Enlazar el informe

Page 18: Tutoriales y Codigo de Ejemplo Crystal Reports

Al seguir las instrucciones de Configuración de proyectos para preparar este tutorial, ha colocado un control CrystalReportViewer en el formulario Web Forms o Windows Forms. En los pasos anteriores, agregó un informe CustomersByCity al proyecto.

En esta sección enlazará la ruta de directorio de archivos del informe CustomersByCity al control CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se han establecido valores actuales para su campo de parámetro.

Para enlazar la ruta de directorio de archivos del informe CustomersByCity al control CrystalReportViewer

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código para ver la clase de código subyacente de este formulario

Web Forms o Windows Forms.3. Busque el método ConfigureCrystalReports(), que ha creado en Configuración de proyectos.4. Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al

informe local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:

• Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena en el método Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco duro en tiempo de ejecución.

[Visual Basic]

Dim reportPath As String = Server.MapPath("CustomersByCity.rpt")

[C#]

string reportPath = Server.MapPath("CustomersByCity.rpt");

• Para un proyecto para Windows, concatene la propiedad Application.StartupPath con una barra invertida y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo ejecutable de Windows.

Nota En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.

[Visual Basic]

Dim reportPath As String = Application.StartupPath & "\" & "CustomersByCity.rpt"

[C#]

string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt";

5. Asigne la ruta del directorio de archivos del informe CustomersByCity a la propiedad ReportSource del control CrystalReportViewer.

[Visual Basic]

myCrystalReportViewer.ReportSource = reportPath

[C#]

crystalReportViewer.ReportSource = reportPath;

Page 19: Tutoriales y Codigo de Ejemplo Crystal Reports

Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se ha escrito el código para establecer un valor para el campo de parámetro Ciudad.

Para probar la carga del informe CustomersByCity

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. Si usa un informe no incrustado en un proyecto para Windows, localice el archivo ejecutable de

Windows compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el informe en dicho subdirectorio.

Nota Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.

4. En el menú Depurar, haga clic en Iniciar.

Nota Si está desarrollando un sitio Web en Visual Studio 2005 y es la primera vez que ha iniciado la depuración, aparecerá un cuadro de diálogo en el que se indica que el archivo Web.config se debe modificar. Haga clic en el botón Aceptar para habilitar la depuración.

No se muestra el informe CustomersByCity. Se muestra después de agregar un valor para el parámetro Ciudad más adelante en este tutorial.

Nota Los resultados pueden variar, según la versión de Crystal Reports que utilice. En versiones más recientes, verá un formulario que le pedirá que indique valores de parámetro para dicho informe. En versiones anteriores, se produce una excepción "Falta el valor actual del campo de parámetro". En cualquiera caso, debe agregar código adicional para que la aplicación sea completamente funcional.

5. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Configurar parámetros manualmente en el código.

Configurar parámetros manualmente en el código

Ahora ya puede establecer dos valores ("París" y "Tokio") en el campo de parámetro Ciudad del informe CustomersByCity.

Esto implica codificación, que puede separar en los siguientes procesos:

• Necesita una constante PARAMETER_FIELD_NAME para contener el nombre de campo de parámetro "Ciudad".

• El código para agregar los valores actuales al parámetro Ciudad se utiliza en distintas partes de este tutorial; por lo tanto, este código se creará como un método de ayuda independiente.

• En el método ConfigureCrystalReports(), va a agregar los parámetros "París" y "Tokio" a una instancia de ArrayList y a pasar el informe y la instancia de ArrayList al método de ayuda para que se procesen.

Para crear una constante PARAMETER_FIELD_NAME

1. Regrese a la clase de código subyacente de este Web Forms o Windows Forms.2. En el nivel de clase, cree una nueva constante de cadena, PARAMETER_FIELD_NAME, y

establezca su valor como "Ciudad".

[Visual Basic]

Page 20: Tutoriales y Codigo de Ejemplo Crystal Reports

Private Const PARAMETER_FIELD_NAME As String = "City"

[C#]

private const string PARAMETER_FIELD_NAME = "City";

Ahora ya puede crear el método de ayuda que agregue los valores actuales al parámetro del informe.

Para crear un método de ayuda que agregue los valores actuales al parámetro del informe

1. Regrese a la clase de código subyacente de este Web Forms o Windows Forms.2. Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#]

en la parte superior de la clase para el espacio de nombres System.Collections (si todavía no se ha declarado este espacio de nombres).

[Visual Basic]

Imports System.Collections

[C#]

using System.Collections;

Nota Esta declaración se necesita para tener acceso a la clase ArrayList.

3. En la parte inferior de la clase, cree un nuevo método privado denominado SetCurrentValuesForParameterField() con dos variables en la firma del método: ParameterFields y ArrayList.

[Visual Basic]

Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As ParameterFields, ByVal myArrayList As ArrayList)

End Sub

[C#]

private void SetCurrentValuesForParameterField(ParameterFields parameterFields, ArrayList arrayList){}

4. En este método, declare y cree una instancia de la clase indizada ParameterValues como la variable currentParameterValues.

Nota Para que se pueda tener acceso a la clase ParameterValues, debe haber incluido una declaración "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos.)

[Visual Basic]

Dim currentParameterValues As ParameterValues = New ParameterValues()

[C#]

Page 21: Tutoriales y Codigo de Ejemplo Crystal Reports

ParameterValues currentParameterValues = new ParameterValues();

5. Cree un bucle foreach para obtener todos los valores enviados (como el tipo Objeto) de la instancia de ArrayList.

Nota En este método, recupera valores de ArrayList. Posteriormente, va a escribir código que agregue valores a ArrayList.

[Visual Basic]

For Each submittedValue As Object In myArrayList

Next

[C#]

foreach(object submittedValue in arrayList){}

6. En el bucle foreach, declare y cree una instancia de la clase ParameterDiscreteValue.

[Visual Basic]

Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()

[C#]

ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();

7. En el bucle foreach, convierta submittedValue en una cadena y pásela a la propiedad Value de la instancia de ParameterDiscreteValue.

[Visual Basic]

myParameterDiscreteValue.Value = submittedValue.ToString()

[C#]

parameterDiscreteValue.Value = submittedValue.ToString();

8. En el bucle foreach, agregue la instancia de ParameterDiscreteValue a la clase indizada currentParameterValues.

[Visual Basic]

currentParameterValues.Add(myParameterDiscreteValue)

[C#]

currentParameterValues.Add(parameterDiscreteValue);

Esto completará el código en el bucle foreach. Coloque el código restante (a partir de los pasos siguientes) después del bucle foreach.

Page 22: Tutoriales y Codigo de Ejemplo Crystal Reports

9. Fuera del bucle foreach, obtenga la instancia de ParameterField de la clase indizada ParameterFields que se basada en la entrada de índice de la constante PARAMETER_FIELD_NAME.

[Visual Basic]

Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)

[C#]

ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];

10. Pase la instancia de currentParameterValues al método CurrentValues de la instancia de ParameterField.

[Visual Basic]

myParameterField.CurrentValues = currentParameterValues

[C#]

parameterField.CurrentValues = currentParameterValues;

Este procedimiento de varios pasos ha mostrado el modo de crear un método que obtiene los valores enviados desde una instancia de ArrayList y los coloca como valores actuales en una instancia de ParameterField. Ahora, debe llamar a este método antes de enlazar el informe al control CrystalReportViewer, para que el informe sepa que tiene configuración de parámetros.

Para llamar al método SetCurrentValuesForParameterField () antes de enlazar el informe al control CrystalReportViewer

1. En el método ConfigureCrystalReports(), declare y cree una instancia de ArrayList encima de la línea que enlaza el informe al control CrystalReportViewer.

[Visual Basic]

Dim myArrayList As ArrayList = New ArrayList()

[C#]

ArrayList arrayList = new ArrayList();

2. Agregue los nombres de ciudad "París" y "Tokio" como cadenas a la instancia de ArrayList.

[Visual Basic]

myArrayList.Add("Paris")myArrayList.Add("Tokyo")

[C#]

arrayList.Add("Paris");arrayList.Add("Tokyo");

3. Debajo del código que enlaza el control CrystalReportViewer, obtenga la instancia de ParameterFields de la propiedad ParameterFieldInfo del control CrystalReportViewer.

Page 23: Tutoriales y Codigo de Ejemplo Crystal Reports

[Visual Basic]

Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo

[C#]

ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;

4. Llame al método SetCurrentValuesForParameterField() y pásele la instancia de ParameterFields y la instancia de ArrayList.

[Visual Basic]

SetCurrentValuesForParameterField(myParameterFields, myArrayList)

[C#]

SetCurrentValuesForParameterField(parameterFields, arrayList);

Ahora estará listo para crear y ejecutar el proyecto. Se espera que el informe se muestre correctamente, porque ahora existe código escrito para establecer los valores actuales en el campo de parámetro.

Para probar la carga del informe CustomersByCity

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

El informe CustomersByCity aparecerá correctamente, mostrando la lista de los clientes de París y Tokio.

4. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

En la siguiente sección, aprenderá como obtener los valores predeterminados del campo de parámetro y establecerá dichos valores en un control ListBox. Éstos se utilizan al final del tutorial para seleccionar nuevas ciudades dinámicamente y filtrar el informe basándose en las ciudades seleccionadas recientemente.

Continúe con Crear un control ListBox que muestre los parámetros predeterminados.

Crear un control ListBox que muestre los parámetros predeterminados

El resto del tutorial trata sobre la visualización de una lista completa de valores predeterminados del campo de parámetro en un control ListBox, y basado en las selecciones que realice en dicho control ListBox, volviendo a filtrar los contenidos del informe.

En esta sección aprenderá a rellenar el control ListBox con los valores predeterminados del campo de parámetro.

Nota Recuerde que ya estableció los Valores predeterminados, una amplia lista de ciudades, al crear este informe al principio del tutorial.

Page 24: Tutoriales y Codigo de Ejemplo Crystal Reports

Para hacerlo, deberá agregar y configurar un control ListBox y, a continuación, crear un método de ayuda para rellenar el control ListBox.

Para crear y configurar un control ListBox en el formulario

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Diseñador.3. Si está desarrollando un sitio Web, realice las siguientes acciones:

a. Haga clic en el control CrystalReportViewer para seleccionarlo.b. Presione la FLECHA IZQUIERDA del teclado de modo que aparezca un cursor parpadeante

y, a continuación, presione INTRO.

El control CrystalReportViewer bajará una línea.

4. Si está desarrollando un proyecto de Windows, realice las siguientes acciones: a. Haga clic en el control CrystalReportViewer para seleccionarlo.b. En la ventana Propiedades, establezca Dock en "Bottom".c. Ajuste el tamaño del control CrystalReportViewer, con el fin de que disponga del

espacio necesario sobre él para un control ListBox.d. En la ventana Propiedades, establezca Anchor en "Top, Bottom, Left, Right".

5. En el Cuadro de herramientas, arrastre un control ListBox sobre el control CrystalReportViewer.

Nota Si aparece una Tarea inteligente en ListBox (si se utiliza Visual Studio 2005), presione Esc para cerrarla.

6. Haga clic en el control ListBox para seleccionarlo.7. Desde la ventana Propiedades siga estos pasos:

Establezca ID o Nombre en "defaultParameterValuesList". Establezca SelectionMode en "Multiple" (en un proyecto de Windows, "MultiExtended").

2. Desde el menú Archivo, seleccione Guardar todo.

Ahora ya podrá crear un método de ayuda que obtenga los valores predeterminados del campo de parámetro.

Para crear un método de ayuda que obtenga los valores predeterminados del campo de parámetro

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código.3. En la parte inferior de la clase, cree un nuevo método privado denominado

GetDefaultValuesFromParameterField() que devuelva una instancia de ArrayList, habiendo pasado ParameterFields a la firma del método.

[Visual Basic]

Private Function GetDefaultValuesFromParameterField(ByVal myParameterFields As ParameterFields) As ArrayList

End Function

[C#]

private ArrayList GetDefaultValuesFromParameterField(ParameterFields parameterFields)

Page 25: Tutoriales y Codigo de Ejemplo Crystal Reports

{}

4. Obtenga la instancia de ParameterField de la clase indizada ParameterFields basada en la entrada de índice de la constante PARAMETER_FIELD_NAME.

[Visual Basic]

Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)

[C#]

ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];

5. Obtenga una clase indizada ParameterValues (como la variable defaultParameterValues) a partir de la propiedad DefaultValues de la instancia de ParameterField.

[Visual Basic]

Dim defaultParameterValues As ParameterValues = myParameterField.DefaultValues

[C#]

ParameterValues defaultParameterValues = parameterField.DefaultValues;

6. Declare y cree una instancia de ArrayList.

[Visual Basic]

Dim myArrayList As ArrayList = New ArrayList()

[C#]

ArrayList arrayList = new ArrayList();

7. Cree un bucle foreach que obtenga cada instancia de ParameterValue a partir de defaultParameterValues.

[Visual Basic]

For Each myParameterValue As ParameterValue In defaultParameterValues

Next

[C#]

foreach(ParameterValue parameterValue in defaultParameterValues){}

En el bucle foreach, cree ahora un bloque condicional anidado que busque valores de parámetros discretos (en oposición a parámetros de rango). Existen dos versiones de este bloque condicional porque la API ha cambiado ligeramente en las distintas versiones de Crystal Reports para Visual Studio. Compruebe su API (mediante IntelliSense) para ver qué propiedad está disponible en ParameterValue:

Page 26: Tutoriales y Codigo de Ejemplo Crystal Reports

8. Si la propiedad disponible es IsRange, en el bucle foreach, escriba este código:

[Visual Basic]

If (Not myParameterValue.IsRange) Then

End If

[C#]

if(!parameterValue.IsRange){}

9. O, si la propiedad disponible es Kind (DiscreteOrRangeKind, una enumeración con tres valores: DiscreteValue, RangeValue, DiscreteAndRangeValue), escriba este código, en el bucle foreach, en su lugar:

[Visual Basic]

If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then

End If

[C#]

if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue){}

10. En este bloque condicional anidado, proyecte la instancia de ParameterValue a su clase ampliada, DiscreteParameterValue.

[Visual Basic]

Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue)

[C#]

ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue;

11. Además, en el bloque condicional anidado, agregue la propiedad Value de la instancia de ParameterDiscreteValue (convertida en cadena) a la instancia de ArrayList.

[Visual Basic]

myArrayList.Add(myParameterDiscreteValue.Value.ToString())

[C#]

arrayList.Add(parameterDiscreteValue.Value.ToString());

12. Fuera del bloque condicional y del bucle foreach, al final del método, devuelva la instancia de ArrayList del método.

Page 27: Tutoriales y Codigo de Ejemplo Crystal Reports

[Visual Basic]

Return myArrayList

[C#]

return arrayList;

Ha obtenido los valores predeterminados del campo de parámetro y los ha devuelto del método como un ArrayList. Ahora enlace este ArrayList al control ListBox defaultParameterValuesList.

El código varía ligeramente en función de si se utiliza un proyecto Web o un proyecto de Windows; por lo tanto, asegúrese de que sólo realiza el procedimiento para Web o para Windows.

Para enlazar el ArrayList devuelto del método al ListBox de un proyecto Web

1. En el método ConfigureCrystalReports(), agregue un par de saltos de línea en el código inmediatamente después de la línea de código que obtiene la instancia de ParameterFields.

En los saltos de línea, ahora puede escribir código adicional que establece el origen de datos para el control ListBox defaultParameterValuesList ListBox cuando la página se carga por primera vez.

2. En los saltos de línea, cree un bloque condicional Not IsPostBack.

[Visual Basic]

If Not IsPostBack Then

End If

[C#]

if(!IsPostBack){}

Nota El bloque condicional Not IsPostBack se usa para encapsular código que sólo se debe ejecutar la primera vez que se carga la página. Los controles se suelen enlazar a los valores de datos en bloques condicionales Not IsPostBack para que sus valores de datos (y los eventos de control subsiguientes) no se restablezcan cuando se vuelva a cargar la página.

3. En el bloque condicional Not IsPostBack, establezca la propiedad DataSource del ListBox defaultParameterValuesList al método de ayuda GetDefaultValuesFromParameterField(), pasando la instancia de ParametersFields como un parámetro de método.

[Visual Basic]

defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)

[C#]

defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields);

Page 28: Tutoriales y Codigo de Ejemplo Crystal Reports

4. Aún en el bloque condicional Not IsPostBack, llame al método DataBind() del ListBox defaultParameterValuesList.

[Visual Basic]

defaultParameterValuesList.DataBind()

[C#]

defaultParameterValuesList.DataBind();

Para enlazar el ArrayList devuelto del método al ListBox de un proyecto de Windows

1. En el método ConfigureCrystalReports(), agregue un par de saltos de línea en el código inmediatamente después de la línea de código que obtiene la instancia de ParameterFields.

En los saltos de línea, ahora puede escribir código adicional que establece el origen de datos para el control ListBox defaultParameterValuesList ListBox cuando la página se carga por primera vez.

2. En los saltos de línea, establezca la propiedad DataSource del ListBox defaultParameterValuesList al método de ayuda GetDefaultValuesFromParameterField(), pasando la instancia de ParametersFields como un parámetro de método.

[Visual Basic]

defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)

[C#]

defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields);

Ahora estará listo para crear y ejecutar el proyecto para verificar si el ListBox defaultParameterValuesList está relleno.

Para probar si está relleno el control ListBox defaultParameterValuesList

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

El control ListBox defaultParameterValuesList mostrará una lista completa de valores predeterminados (ciudades, en nuestro tutorial).

4. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

En la siguiente sección, agregará un botón para volver a mostrar el informe basado en las selecciones del control ListBox defaultParameterValuesList.

Continúe con Configurar parámetros a partir de las selecciones de ListBox.

Page 29: Tutoriales y Codigo de Ejemplo Crystal Reports

Configurar parámetros a partir de las selecciones de ListBox

En esta sección, agregará un botón para volver a mostrar el informe basado en las selecciones del control ListBox defaultParameterValuesList. En el método de evento de este botón, llamará al mismo método que se llama al cargar la página por primera vez: SetCurrentValuesForParameterField(). Pero esta vez, en lugar de pasar valores arbitrarios (París y Tokio), pasará los valores seleccionados en el control ListBox defaultParameterValuesList.

Para crear y configurar un botón que vuelva a mostrar el informe en el formulario

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Diseñador.3. En la Caja de herramientas, arrastre un control Button a la derecha del control ListBox.4. Haga clic en el control Button para seleccionarlo.5. Desde la ventana Propiedades siga estos pasos:

• Establezca el valor de ID o Nombre en "redisplay".• Establezca Text como "Volver a mostrar el informe".

Ahora podrá crear un método de evento de clic de botón que busque los elementos seleccionados en el control ListBox y los pase al método SetCurrentValuesForParameterField().

El código varía ligeramente para un proyecto Web o un proyecto de Windows; por lo tanto, realice sólo el procedimiento para Web o para Windows.

Para crear el método de evento de clic del botón que vuelve a mostrar el informe en un proyecto Web

1. Haga doble clic en el botón Volver a mostrar el informe.

Pasa a la clase de código subyacente en la que se ha generado automáticamente un método de evento redisplay_Click().

2. Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase para el espacio de nombres System.Web.UI.WebControls (si todavía no se ha declarado este espacio de nombres).

[Visual Basic]

Imports System.Web.UI.WebControls

[C#]

using System.Web.UI.WebControls;

Nota Esta declaración se necesita para tener acceso a la clase ListItem.

3. En el método de evento redisplay_Click() que se acaba de generar automáticamente, declare y cree una instancia de ArrayList.

[Visual Basic]

Dim myArrayList As ArrayList = New ArrayList()

[C#]

Page 30: Tutoriales y Codigo de Ejemplo Crystal Reports

ArrayList arrayList = new ArrayList();

4. Cree un bucle foreach para obtener cada instancia de ListItem a partir de la propiedad Items del ListBox defaultParameterValuesList.

[Visual Basic]

For Each item As ListItem In defaultParameterValuesList.Items

Next

[C#]

foreach(ListItem item in defaultParameterValuesList.Items){}

5. En el bucle foreach, cree un bloque condicional anidado que compruebe si la propiedad Selected de la instancia de Item actual está establecida como True.

[Visual Basic]

If item.Selected Then

End If

[C#]

if(item.Selected){}

6. En el bloque condicional, agregue la propiedad Value de la instancia de Item a la instancia de ArrayList.

[Visual Basic]

myArrayList.Add(item.Value)

[C#]

arrayList.Add(item.Value);

7. Fuera del bloque condicional y del bucle foreach, vuelva a enlazar la ruta de directorio de archivos del informe CustomersByCity a la propiedad ReportSource de la clase CrystalReportViewer.

Nota La ruta de directorio de archivos que se muestra más abajo es la de un proyecto de Visual Studio 2005. "ProjectName" se reemplaza por el nombre del sitio Web. "UserName" se reemplaza por el nombre de conexión.

La ruta predeterminada para un proyecto de sitio Web:

[Visual Basic]

myCrystalReportViewer.ReportSource = "C:\WebSites\ProjectName\CustomersByCity.rpt"

Page 31: Tutoriales y Codigo de Ejemplo Crystal Reports

[C#]

crystalReportViewer.ReportSource = "C:\\WebSites\\ProjectName\\CustomersByCity.rpt";

8. Asigne la instancia de ParameterFields de la propiedad ParameterFieldInfo del control CrystalReportViewer.

[Visual Basic]

Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo

[C#]

ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;

9. Pase la instancia de ParameterFields y de ArrayList al método SetCurrentValuesForParameterField().

[Visual Basic]

SetCurrentValuesForParameterField(myParameterFields, myArrayList)

[C#]

SetCurrentValuesForParameterField(parameterFields, arrayList);

Para crear el método de evento de clic del botón que vuelve a mostrar el informe en un proyecto de Windows

1. Haga doble clic en el control Button que vuelve a mostrar el informe.

Pasa a la clase de código subyacente en la que se ha generado automáticamente un método de evento redisplay_Click().

2. En el método de evento redisplay_Click() que se acaba de generar automáticamente, declare y cree una instancia de ArrayList.

[Visual Basic]

Dim myArrayList As ArrayList = New ArrayList()

[C#]

ArrayList arrayList = new ArrayList();

3. Cree un bucle foreach para obtener cada elemento (como una cadena) de la propiedad SelectedItems del ListBox defaultParameterValuesList.

[Visual Basic]

For Each item As String In defaultParameterValuesList.SelectedItems

Next

Page 32: Tutoriales y Codigo de Ejemplo Crystal Reports

[C#]

foreach(string item in defaultParameterValuesList.SelectedItems){}

4. En el bloque foreach, agregue la instancia de cadena Item a la instancia de ArrayList.

[Visual Basic]

myArrayList.Add(item)

[C#]

arrayList.Add(item);

5. Fuera del bucle foreach, vuelva a enlazar la ruta de directorio de archivos del informe CustomersByCity a la propiedad ReportSource de la clase CrystalReportViewer.

Nota La ruta de directorio de archivos que se muestra más abajo es la de un proyecto de Visual Studio 2005. "ProjectName" se reemplaza por el nombre del proyecto de Windows. "UserName" se reemplaza por el nombre de conexión.

La ruta predeterminada para un proyecto de Windows:

[Visual Basic]

myCrystalReportViewer.ReportSource = "C:\Documents and Settings\UserName\My Documents\Visual Studio\Projects\ProjectName\CustomersByCity.rpt"

[C#]

crystalReportViewer.ReportSource = "C:\\Documents and Settings\\UserName\\My Documents\\Visual Studio\\Projects\\ ProjectName\\CustomersByCity.rpt";

6. Asigne la instancia de ParameterFields de la propiedad ParameterFieldInfo del control CrystalReportViewer.

[Visual Basic]

Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo

[C#]

ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;

7. Pase la instancia de ParameterFields y de ArrayList al método SetCurrentValuesForParameterField().

[Visual Basic]

SetCurrentValuesForParameterField(myParameterFields, myArrayList)

[C#]

Page 33: Tutoriales y Codigo de Ejemplo Crystal Reports

SetCurrentValuesForParameterField(parameterFields, arrayList);

Ahora que se ha aplicado los valores seleccionados del control ListBox como los valores actuales del campo de parámetro, estará listo para volver a mostrar el informe.

Ahora estará preparado para generar y ejecutar el proyecto para verificar que el campo de parámetro se ha restablecido correctamente.

Para probar si está relleno el control ListBox defaultParameterValuesList

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.4. En el control ListBox, presione la tecla CTRL mientras hace clic para seleccionar ciudades

diferentes en la lista.5. Haga clic en el botón Volver a mostrar el informe.

La página se volverá a cargar y mostrará los registros de cliente para los clientes que vivan en la lista de ciudades que ha seleccionado.

6. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Configurar la persistencia de parámetros.

Configurar la persistencia de parámetros

En esta sección configurará la persistencia (en un tutorial basado en Web) de las selecciones de campo de parámetro que se han realizado en el control ListBox.

Para demostrar la falta de persistencia de las selecciones de parámetro

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.4. En el control ListBox, presione la tecla Mayús mientras hace clic para seleccionar todas las

ciudades de la lista.5. Haga clic en Volver a mostrar el informe.

La página se vuelve a cargar y, a continuación, muestra los registros de cliente de todos los clientes de todas las ciudades. Es un informe extenso que contiene muchas páginas.

6. En la barra de herramientas CrystalReportViewer, haga clic en Página siguiente.

No se conserva la lista de las ciudades seleccionadas. La página 2 del informe no se muestra. En su lugar, vuelve a aparecer la configuración de parámetros de inicio (París y Tokio).

Nota En Visual Studio .NET 2002, la lista de las ciudades seleccionar se puede conservar debido a diferencias de versión.

7. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Debe agregar código de persistencia a la aplicación para que se conserven los cambios efectuados cuando se vuelvan a cargar las páginas Web.

Page 34: Tutoriales y Codigo de Ejemplo Crystal Reports

Para comenzar, va a agregar código de conservación al método ConfigureCrystalReports() agregando un bloque Else al bloque condicional If Not IsPostBack. A continuación, va a establecer valores únicos para la instancia de ArrayList por cada condición del bloque condicional. Al iniciarse la página, va a establecer los valores predeterminados ("París" y "Tokio") en la instancia de ArrayList. Al volver a cargarse la página, va a recuperar la instancia de ArrayList que está almacenada en Session.

Para agregar código de persistencia al método ConfigureCrystalReports()

1. En el método ConfigureCrystalReports(), corte y pegue las dos líneas de código que agregan París y Tokio al ArrayList en la parte inferior del bloque condicional Not IsPostBack.

Cuando haya terminado, el aspecto del bloque condicional debe ser parecido al siguiente:

[Visual Basic]

If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields) defaultParameterValuesList.DataBind() myArrayList.Add("Paris") myArrayList.Add("Tokyo")End If

[C#]

if (!IsPostBack){ defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields); defaultParameterValuesList.DataBind(); arrayList.Add("Paris"); arrayList.Add("Tokyo");}

2. Agregue una línea final de código al bloque condicional que asigna la instancia ArrayList a Session.

Nota Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.

[Visual Basic]

Session("myArrayList") = myArrayList

[C#]

Session["arrayList"] = arrayList;

3. Agregue una condición Else al bloque condicional Not IsPostBack.4. En el bloque Else, obtenga la instancia de ArrayList de Session y proyéctela en ArrayList.

[Visual Basic]

myArrayList = Ctype(Session("myArrayList"), ArrayList)

[C#]

Page 35: Tutoriales y Codigo de Ejemplo Crystal Reports

arrayList = (ArrayList)Session["arrayList"];

Cuando haya terminado, el aspecto del bloque condicional debe ser parecido al siguiente:

[Visual Basic] If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields) defaultParameterValuesList.DataBind() myArrayList.Add("Paris") myArrayList.Add("Tokyo") Session("myArrayList") = myArrayListElse myArrayList = Ctype(Session("myArrayList"), ArrayList)End If[C#] if (!IsPostBack){ defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields); defaultParameterValuesList.DataBind(); arrayList.Add("Paris"); arrayList.Add("Tokyo"); Session["arrayList"] = arrayList;}else{ arrayList = (ArrayList)Session["arrayList"];}

Estas modificaciones en el método ConfigureCrystalReports() garantizan que siempre se pase la instancia actual de ArrayList al método SetCurrentValuesForParameterField().

En la siguiente sección, realizará dos cambios en el código del evento de clic de botón:

• Tomar el ArrayList que ha creado y asignarlo a Session.• Reemplace las dos últimas líneas de código (que configuran y muestran el informe) con una

llamada al método ConfigureCrystalReports() para realizar esta función en un conjunto común de código.

Para modificar el código del método de evento de clic de botón para que funcione con la persistencia de Session

1. Elimine las tres últimas líneas de código del método de evento de clic de botón. • La primera línea de código que se eliminará es el código que enlaza la ruta de directorio

de archivos del informe a la propiedad ReportSource del control CrystalReportViewer.• La segunda línea de código que se eliminará es el código que obtiene la instancia de

ParameterFields de la propiedad ParameterFieldInfo del control CrystalReportViewer.• La tercera línea de código que se eliminará es la llamada al método

SetCurrentValuesForParameterField().

En el siguiente paso agregará dos nuevas líneas de código para reemplazar el código eliminado.

2. En el método de evento de clic de botón, inmediatamente fura del bucle foreach, agregue una línea de código que asigne la instancia de ArrayList a Session.

Nota Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.

Page 36: Tutoriales y Codigo de Ejemplo Crystal Reports

[Visual Basic]

Session("myArrayList") = myArrayList

[C#]

Session["arrayList"] = arrayList;

3. Llame al método ConfigureCrystalReports().

De este modo se obtiene la instancia de ArrayList, la aplica al informe y enlaza el informe al control CrystalReportViewer.

[Visual Basic]

ConfigureCrystalReports()

[C#]

ConfigureCrystalReports();

Ahora estará preparado para generar y ejecutar el proyecto para verificar que el campo de parámetro se ha restablecido correctamente.

Para probar si está relleno el control ListBox defaultParameterValuesList

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.4. En el control ListBox, presione la tecla Mayús mientras hace clic para seleccionar todas las

ciudades de la lista.5. Haga clic en Volver a mostrar el informe.

La página se vuelve a cargar y muestra los registros de cliente de todos los clientes de todas las ciudades. Es un informe extenso que contiene muchas páginas.

6. En la barra de herramientas CrystalReportViewer, haga clic en Página siguiente.7. Ahora se conserva la lista de las ciudades seleccionadas. Se muestra la página 2 del informe.8. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Conclusión.

Conclusión

Ha creado correctamente un informe con un valor de parámetro discreto, ha creado método de ayuda que acepta cualquier conjunto de valores en un formato común (un ArrayList) y ha aplicado dichos valores a un informe basado en un nombre de campo de parámetro específico (la constante PARAMETER_FIELD_NAME).

También ha aprendido a llenar el un control ListBox con los valores predeterminados de un campo de parámetro particular. Ha aprendido a obtener los valores seleccionados del ListBox y colocarlos en un ArrayList para volver a llamar al método de ayuda original y cambiar la lista de valores de parámetro, así como la presentación del informe.

Page 37: Tutoriales y Codigo de Ejemplo Crystal Reports

Nota Ahora puede seguir trabajando con este tutorial y agregar un subinforme al informe y, a continuación, configurar dicho subinforme con un parámetro de rango. Si lo desea, continúe con el siguiente tutorial, que modifica el tutorial actual, Leer y configurar parámetros de rango con un subinforme.

Tutorial: Leer y configurar parámetros de rango para un subinforme

En este tutorial explorará una complicación adicional: ¿qué sucede si el informe contiene un subinforme que necesita parámetros distintos?

Para llevar a cabo este tutorial, debe realizar el tutorial anterior, Leer y configurar parámetros discretos.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Introducción

Page 38: Tutoriales y Codigo de Ejemplo Crystal Reports

• Agregar un subinforme al informe original• Agregar el código de parámetro de subinforme• Agregar controles TextBox para contener valores de parámetro de rango• Modificar métodos para llamar al subinforme• Probar el parámetro de subinforme• Conclusión• Información de código de ejemplo

Introducción

En el tutorial anterior, Leer y configurar parámetros discretos, obtuvo información sobre cómo crear un informe con un parámetro discreto y cómo escribir código que estableciera dicho parámetro en tiempo de ejecución, tanto con valores de parámetro codificados como con valores de parámetros pasados desde un control ListBox o TextBox.

En este tutorial, aprenderá a agregar parámetros de rango a un subinforme.

Necesita realizar cuatro modificaciones al proyecto que ha creado en Leer y configurar parámetros discretos:

• Agregará un subinforme al informe original.

Este subinforme direcciona la tabla Pedidos de la base de datos Xtreme. La tabla Pedidos está relacionada con la tabla Clientes que se ha utilizado en el tutorial anterior mediante una clave externa ID del cliente.

• Agregará un parámetro de rango al subinforme que filtre por un rango de fechas de pedido.• Agregará dos controles Text al formulario: orderStartDate y orderEndDate, para establecer el

rango de fechas de pedido en tiempo de ejecución.• Modificará el método SetCurrentValuesForParameter() que ha creado en el tutorial anterior.

Este método crea una instancia de ParameterRangeValue que contiene los valores startDate y endDate values, y, a continuación, pasa dicha instancia de ParameterRangeValue al parámetro de rango en el subinforme.

Cuando termine este tutorial, podrá filtrar los valores que se muestran en el informe en tiempo de ejecución. El código que agregue limita el número de ciudades que se muestran en el informe principal, así como el rango de las fechas de pedido que se muestran en el subinforme.

Este tutorial también se puede realizar con clases del modelo de objetos ReportDocument; vea Leer y configurar parámetros con un subinforme mediante el modelo de objetos ReportDocument. Para obtener más información sobre el uso del modelo de objetos, vea ¿Cuál es el modelo de objetos que se debe utilizar?.

Continúe con Agregar un subinforme al informe original.

Agregar un subinforme al informe original

Para empezar, agregará un subinforme al informe original.

Para agregar un subinforme

1. Abra el proyecto que ha creado en el tutorial anterior, Leer y configurar parámetros discretos.2. En Explorador de soluciones, haga doble clic en el informe CustomersByCity para abrirlo.

Page 39: Tutoriales y Codigo de Ejemplo Crystal Reports

3. Haga clic con el botón derecho en la barra gris Detalles y seleccione Insertar sección abajo.4. Haga clic con el botón derecho en la nueva sección Detalles b que ha creado, seleccione

Insertar y, a continuación, haga clic en Subinforme.

Aparece un cuadrado gris alrededor del cursor del mouse.

5. Arrastre el rectángulo gris en la nueva sección Detalles b y, a continuación, haga clic para soltarlo.

6. En el cuadro de diálogo Insertar un subinforme, en la ficha Subinforme, seleccione Crear un subinforme con el Asistente de informes.

Nota El cuadro de diálogo Insertar un subinforme incluye otras opciones que permiten elegir un informe existente y subinformes a petición. Para obtener más información sobre estas funciones, vea Insertar un subinforme (cuadro de diálogo).

7. En el campo Nombre del informe nuevo, escriba "PedidosClientes".8. Haga clic en Asistente de informes...9. En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de

informes estándar, expanda la carpeta Crear nueva conexión.

Nota En Visual Studio .NET 2002 o 2003, donde Crystal Reports no se ha actualizado a Crystal Reports Developer, no existe la carpeta Crear nueva conexión; el contenido se mostrará en el nivel superior.

10. En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).11. En la ventana ODBC (RDO), seleccione la entrada DSN de ODBC correcta para su versión de

Crystal Reports, como se explica en Entrada DSN de ODBC para la base de datos de ejemplo Xtreme y, a continuación, haga clic en Finalizar.

Se expandirá la carpeta ODBC (RDO) y mostrará la base de datos de ejemplo Xtreme.

12. Seleccione la tabla Pedidos y haga clic en el símbolo > para mover la tabla Pedidos al panel Seleccionar tablas y, a continuación, haga clic en Siguiente.

13. En el panel Campos disponibles, seleccione ID del pedido, Fecha del pedido, Fecha de envío y Enviar vía.

14. Haga clic en el símbolo > para mover estos campos al panel Campos para mostrar y, a continuación, haga clic en Finalizar.

15. En el cuadro de diálogo Insertar un subinforme, seleccione la ficha Vínculo.16. En el panel Campo(s) del informe contenedor para vincular, en la lista Campos

disponibles, expanda la tabla Clientes, seleccione ID del cliente y, a continuación, haga clic en el símbolo >.

17. En el panel Vínculo de campo Clientes.ID del cliente que aparece, deje las selecciones predeterminadas inalteradas.

Estas selecciones de parámetros y de datos generan automáticamente entre el informe principal y el subinforme.

18. Haga clic en Aceptar.

El nuevo subinforme, PedidosClientes, se muestra en la sección Detalles b del informe principal.

Nota Al agregar un subinforme a la sección Detalles, el subinforme se muestra por cada fila, lo que agrega un costo de rendimiento al informe. Si no necesita información de subinforme a ese nivel de granularidad, coloque el subinforme en una sección Grupo en vez de hacerlo en una sección Detalles.

Page 40: Tutoriales y Codigo de Ejemplo Crystal Reports

Ahora está listo para verificar la configuración del subinforme.

Para verificar la configuración del subinforme

1. En la sección Detalles, haga doble clic en el subinforme PedidosClientes para verlo.

En la parte inferior de la vista del diseñador, aparecen botones de desplazamiento para el informe principal y el subinforme PedidosClientes.

2. Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en Cambiar la vista del campo.

Nota Otro modo de ver el Explorador de campos es haciendo clic en Explorador de campos en el menú Crystal Reports.

3. En el Explorador de campos, expanda Campos de parámetro.4. Verifique que el campo de parámetro Pm-Clientes.ID del cliente se ha generado

automáticamente al vincular el subinforme.5. En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.6. En el cuadro de diálogo Asistente de selección, verifique que está establecido el criterio

Pedidos.ID del cliente es igual a {Pm-Clientes.ID del cliente} y, a continuación, haga clic en Aceptar.

7. Desde el menú Archivo, seleccione Guardar todo.

Ha agregado correctamente un subinforme PedidosClientes al informe CustomersByCity. En la sección siguiente agregará un parámetro OrderDateRange al subinforme.

Para agregar un parámetro OrderDateRange al subinforme

1. En el Explorador de campos, haga clic con el botón derecho en Campos de parámetro y seleccione Nuevo...

2. En el cuadro de diálogo Crear campo de parámetro: • Defina el Nombre como "OrderDateRange".• Defina Texto de solicitud como "Especifique un rango de fechas de pedidos para

mostrar".• Defina Tipo de valor como "Fecha".• Defina Opciones como una sola selección, "Rango de valores".

3. Haga clic en Aceptar.4. En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.5. Haga clic en la ficha Nuevo.6. En el cuadro de diálogo Elegir campo, expanda la tabla Pedidos, seleccione Fecha del pedido

y, a continuación, haga clic en Aceptar.7. En la nueva ficha Pedidos.Fecha del pedido, en la lista desplegable de criterios, seleccione

fórmula:8. Escriba la siguiente fórmula:

{Orders.Order Date} in {?OrderDateRange}

9. Haga clic en Aceptar.10. Desde el menú Archivo, seleccione Guardar todo.

Ha agregado correctamente un parámetro OrderDateRange al subinforme y lo ha vinculado a la columna Pedidos.Fecha del pedido. En la sección siguiente agregará código para direccionar el parámetro OrderDateRange en el subinforme.

Page 41: Tutoriales y Codigo de Ejemplo Crystal Reports

Continúe con Agregar el código de parámetro de subinforme.

Agregar el código de parámetro de subinforme

Ahora está listo para agregar el código de parámetro para el subinforme a la clase de código subyacente. Para empezar, cree un método de ayuda privado, SetDateRangeForOrders().

Para crear y codificar el método SetDateRangeForOrders()

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código.3. En la parte superior de la clase, agregue dos nuevas constantes debajo de la constante

PARAMETER_FIELD_NAME agregada en el tutorial anterior.

[Visual Basic]

Private Const SUBREPORT_PARAMETER_FIELD_NAME As String = "OrderDateRange"Private Const SUBREPORT_NAME As String = "CustomerOrders"

[C#]

private const string SUBREPORT_PARAMETER_FIELD_NAME = "OrderDateRange";private const string SUBREPORT_NAME = "CustomerOrders";

4. En la parte inferior de la clase, cree un nuevo método privado denominado SetDateRangeForOrders()con tres parámetros: ParameterFields, string startDate y string endDate.

[Visual Basic]

Private Sub SetDateRangeForOrders(ByVal myParameterFields As ParameterFields, ByVal startDate As String, ByVal endDate As String)

End Sub

[C#]

private void SetDateRangeForOrders(ParameterFields parameterFields, string startDate, string endDate){}

5. En este método, declare y cree una instancia de la clase ParameterRangeValue.

[Visual Basic]

Dim myParameterRangeValue As ParameterRangeValue = New ParameterRangeValue()

[C#]

ParameterRangeValue parameterRangeValue = new ParameterRangeValue();

Nota Para que la clase ParameterRangeValue sea accesible, deberá incluir un enunciado "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos.)

Page 42: Tutoriales y Codigo de Ejemplo Crystal Reports

6. Establezca la propiedad StartValue de la instancia de ParameterRangeValue en el parámetro de método startDate.

[Visual Basic]

myParameterRangeValue.StartValue = startDate

[C#]

parameterRangeValue.StartValue = startDate;

Nota Las propiedades StartValue y EndValue de la clase ParameterRangeValue aceptan valores de tipo Object. Este tipo genérico permite que el valor de rango que se pasa sea de muchos tipos, incluidos: texto, número, fecha, moneda u hora.

7. Establezca la propiedad EndValue de la instancia de ParameterRangeValue en el parámetro de método endDate.

[Visual Basic]

myParameterRangeValue.EndValue = endDate

[C#]

parameterRangeValue.EndValue = endDate;

8. Establezca los límites inferior y superior para que sean bound-inclusive.

[Visual Basic]

myParameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusivemyParameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive

[C#]

parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive;parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;

Nota Para BoundInclusive, los valores de rango superior e inferior no se incluyen en el rango.

Ahora está preparado para asignar la instancia de ParameterRangeValue al parámetro del subinforme.

9. Obtenga la instancia de ParameterField de la clase indizada ParameterFields basada dos valores indizados: el nombre de campo de parámetro de subinforme y el nombre de subinforme. Pase los dos valores de constante que ha declarado al principio de la clase.

[Visual Basic]

Dim myParameterField As ParameterField = myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)

[C#]

ParameterField parameterField = parameterFields[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];

Page 43: Tutoriales y Codigo de Ejemplo Crystal Reports

10. Llame al método Clear() de la propiedad CurrentValues de la instancia de ParameterField para eliminar cualquier valor existente de la propiedad CurrentValues.

[Visual Basic]

myParameterField.CurrentValues.Clear()

[C#]

parameterField.CurrentValues.Clear();

11. Agregue la instancia de ParameterRangeValue, que ha creado anteriormente, a la propiedad CurrentValues de la instancia de ParameterField.

[Visual Basic]

myParameterField.CurrentValues.Add(myParameterRangeValue)

[C#]

parameterField.CurrentValues.Add(parameterRangeValue);

Este procedimiento de varios pasos ha establecido los valores de fecha inicial y final en una instancia de ParameterRangeValue y los ha pasado al parámetro OrderDateRange del subinforme PedidosClientes.

Continúe con Agregar controles TextBox para contener valores de parámetro de rango.

Agregar controles TextBox para contener valores de parámetro de rango

En esta sección, agregará dos controles TextBox que proporcionan los valores de fecha inicial y final en tiempo de ejecución al parámetro de rango OrderDateRange del informe PedidosClientes.

Nota Si implementa este tutorial en un sitio Web, la persistencia de los valores de fecha que el usuario escribe en los cuadros de texto se mantiene mediante ViewState.

Para crear y configurar un botón que vuelva a mostrar el informe en el formulario

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Diseñador.3. Si está desarrollando un sitio Web, realice las siguientes acciones:

a. Haga clic entre el control ListBox y el control Button.b. Presione INTRO tres veces para crear dos líneas entre el control ListBox y el control

Button.c. En la primera línea creada debajo del control ListBox, escriba "Fecha inicial de pedidos".d. En la segunda línea creada debajo del control ListBox, escriba "Fecha final de pedidos".

4. Si está desarrollando un proyecto de Windows, realice las siguientes acciones: a. En la Caja de herramientas, arrastre dos controles Label a la derecha del control

ListBox. Coloque una etiqueta encima de la otra y ambas encima del control Button.b. Seleccione el primer control Label y, a continuación, en la ventana Propiedades,

establezca la propiedad Text en "Fecha inicial de pedidos".c. Seleccione el segundo control Label y, a continuación, en la ventana Propiedades,

establezca la propiedad Text en "Fecha final de pedidos".

Los pasos restantes se aplican tanto a los proyectos Web como a los de Windows.

Page 44: Tutoriales y Codigo de Ejemplo Crystal Reports

1. En Cuadro de herramientas, arrastre un control TextBox hasta la derecha de "Fecha inicial de pedidos".

2. Haga clic en el control TextBox para seleccionarlo.3. En la ventana Propiedades, establezca ID (o Name) en "orderStartDate".4. En Cuadro de herramientas, arrastre un control TextBox hasta la derecha de "Fecha final de

pedidos".5. Haga clic en el control TextBox para seleccionarlo.6. En la ventana Propiedades, establezca ID (o Name) en "orderEndDate".7. Desde el menú Archivo, seleccione Guardar todo.

Continúe con Modificar métodos para llamar al subinforme.

Modificar métodos para llamar al subinforme

Ahora debe modificar el método ConfigureCrystalReports() y el método de evento redisplay_Click() para recibir información de estos controles TextBox y aplicarlos al método SetDateRangeForOrders(), para que se procese la información de parámetro para los subinformes.

En el tutorial anterior, Leer y configurar parámetros discretos, ha diseñado estos métodos de dos formas distintas, en función de si incluía la persistencia de Session.

Nota Los proyectos de Windows no requieren persistencia de Session. Los sitios Web normalmente requieren persistencia de Session.

Elija uno (pero no ambos) de los procedimientos de varios pasos siguientes. Modifique los métodos que excluyen la persistencia de Session o modifique los que incluyan persistencia de Session:

• Modificar los métodos que excluyen la persistencia de Session.• Modificar los métodos que incluyen la persistencia de Session.

Modificar los métodos que excluyen la persistencia de Session

Si ha terminado el tutorial anterior, Leer y configurar parámetros discretos, y ha excluido la persistencia de Session, realice los siguientes procedimientos. De lo contrario, vaya a Modificar los métodos que incluyen la persistencia de Session.

Para modificar el método ConfigureCrystalReports() que excluye la persistencia de Session

1. En el método ConfigureCrystalReports(), agregue un par de saltos de línea en el código después de las líneas que asignan "París" y "Tokio" como variables ArrayList.

2. En los saltos de línea, declare y establezca valores codificados para dos variables de cadena, startDate y endDate.

[Visual Basic]

Dim startDate As String = "8/1/1997"Dim endDate As String = "8/31/1997"

[C#]

string startDate = "8/1/1997";string endDate = "8/31/1997";

Page 45: Tutoriales y Codigo de Ejemplo Crystal Reports

3. Debajo del código que llama a SetCurrentValuesForParameterField(), llame al método SetDateRangeForOrders() y pásele la instancia de ParameterFields y las variables startDate y endDate.

[Visual Basic]

SetDateRangeForOrders(myParameterFields, startDate, endDate)

[C#]

SetDateRangeForOrders(parameterFields, startDate, endDate);

4. Desde el menú Archivo, seleccione Guardar todo.

A continuación, modificará el método de evento redisplay_Click.

Para modificar el método redisplay_Click() que excluye la persistencia de Session

1. En el método de evento redisplay_Click(), agregue un par de saltos de línea en el código encima de la línea que enlaza el informe al control CrystalReportViewer.

2. En los saltos de línea, declare y establezca valores para dos variables de cadena, startDate y endDate, de los controles TextBox que ha agregado al formulario Web Forms o Windows Forms.

[Visual Basic]

Dim startDate As String = orderStartDate.TextDim endDate As String = orderEndDate.Text

[C#]

string startDate = orderStartDate.Text;string endDate = orderEndDate.Text;

3. Debajo del código que llama a SetCurrentValuesForParameterField(), llame al método SetDateRangeForOrders() y pásele la instancia de ParameterFields y las variables startDate y endDate.

[Visual Basic]

SetDateRangeForOrders(myParameterFields, startDate, endDate)

[C#]

SetDateRangeForOrders(parameterFields, startDate, endDate);

4. Desde el menú Archivo, seleccione Guardar todo.

Modificar los métodos que incluyen la persistencia de Session

Si ha terminado el tutorial anterior, Leer y configurar parámetros discretos, y ha incluido la persistencia de Session, realice los siguientes procedimientos. De lo contrario, continúe con Modificar los métodos que excluyen la persistencia de Session.

Page 46: Tutoriales y Codigo de Ejemplo Crystal Reports

Para modificar el método ConfigureCrystalReports() que incluye la persistencia de Session

1. En el método ConfigureCrystalReports(), agregue un par de saltos de línea en el código después de la línea que declara y crea una instancia de ArrayList.

2. En los saltos de línea, declare dos variables de cadena, startDate y endDate.

[Visual Basic]

Dim startDate As StringDim endDate As String

[C#]

string startDate;string endDate;

3. En el bloque condicional Not IsPostBack, escriba los valores predeterminados para las variables startDate y endDate.

[Visual Basic]

startDate = "8/1/1997"endDate = "8/31/1997"

[C#]

startDate = "8/1/1997";endDate = "8/31/1997";

4. En el bloque condicional Not IsPostBack, asigne las variables startDate y endDate a Session.

[Visual Basic]

Session("startDate") = startDateSession("endDate") = endDate

[C#]

Session["startDate"] = startDate;Session["endDate"] = endDate;

5. En el bloque Else, después de obtener la instancia de ArrayList de Session, obtenga las variables startDate y endDate de Session.

[Visual Basic]

startDate = Session("startDate").ToString()endDate = Session("endDate").ToString()

[C#]

startDate = Session["startDate"].ToString();endDate = Session["endDate"].ToString();

Page 47: Tutoriales y Codigo de Ejemplo Crystal Reports

Con este enfoque, se llega al final del bloque con las variables de fecha asignadas en cualquier caso. De este modo se sigue la lógica paralela a la asignación de la variable ArrayList que ha configurado en el tutorial anterior.

6. Debajo del código que llama a SetCurrentValuesForParameterField(), llame al método SetDateRangeForOrders() y pásele la instancia de ParameterFields y las variables startDate y endDate.

[Visual Basic]

SetDateRangeForOrders(myParameterFields, startDate, endDate)

[C#]

SetDateRangeForOrders(parameterFields, startDate, endDate);

7. Desde el menú Archivo, seleccione Guardar todo.

A continuación, modificará el método de evento redisplay_Click.

Para modificar el método redisplay_Click() que incluye la persistencia de Session

1. En el método de evento redisplay_Click(), agregue un par de saltos de línea en el código después de la línea que asigna la instancia de ArrayList a Session.

2. En los saltos de línea, asigne la propiedad Text del TextBox orderStartDate y orderEndDate a variables de Session.

[Visual Basic]

Session("startDate") = orderStartDate.TextSession("endDate") = orderEndDate.Text

[C#]

Session["startDate"] = orderStartDate.Text;Session["endDate"] = orderEndDate.Text;

3. Desde el menú Archivo, seleccione Guardar todo.

Se recuperan y aplican estos valores de startDate y endDate Session cuando se llama al método ConfigureCrystalReports().

Ahora estará preparado para generar y ejecutar el proyecto para verificar que los valores TextBox restablecen el parámetro de rango del subinforme.

Continúe con Probar el parámetro de subinforme.

Probar el parámetro de subinforme

Ya está preparado para probar la configuración del parámetro de subinforme desde los valores TextBox.

Para probar la configuración del parámetro de subinforme

Page 48: Tutoriales y Codigo de Ejemplo Crystal Reports

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.4. En el control ListBox, presione la tecla CTRL mientras hace clic para seleccionar al menos cuatro

ciudades diferentes en la lista.5. En el control TextBox startDate, escriba "1/1/1997".6. En el control TextBox endDate, escriba "31/8/1997".7. Haga clic en el botón Volver a mostrar el informe.

La página se volverá a cargar y mostrará los registros de cliente para los clientes que vivan en las ciudades de la lista que acaba de seleccionar, así como un subinforme que muestra los pedidos del rango de fechas especificado anteriormente.

8. En el control CrystalReportViewer, aumente el nivel de Zoom al 125%.

La página se recargará al 125% de zoom. Se conservan los valores que están seleccionados para ambas ciudades y el rango de fechas de pedido.

9. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Conclusión.

Conclusión

Ha modificado correctamente el proyecto del tutorial para utilizar un informe que contiene un subinforme y ha establecido un rango de fechas de pedidos en el parámetro de rango que se crea en el subinforme.

Tutorial: Filtrar datos con fórmulas de selección

En este tutorial, aprenderá a usar las fórmulas de selección para filtrar los registros que desee mostrar en un informe de Crystal.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Introducción

Page 49: Tutoriales y Codigo de Ejemplo Crystal Reports

• Crear un informe con una fórmula de selección• Enlazar el informe• Agregar controles para usarlos en la fórmula de selección• Establecer la fórmula de selección manualmente en código• Utilizar un control DropDownList para modificar la fórmula de selección• Conclusión• Información de código de ejemplo

Introducción

Las fórmulas de selección se utilizan para filtrar los registros que desee mostrar en un informe de Crystal. Para escribir fórmulas de selección, puede usar las sintaxis Basic y Crystal. Para obtener más información sobre cómo se escriben las fórmulas de selección, vea Referencia de fórmulas.

En este tutorial, va a crear una fórmula de selección para filtrar los registros de los clientes cuyo campo Ventas del año pasado es mayor que un valor especificado y el campo Nombre del cliente se compara con otra cadena. Se utiliza un control ListBox con el fin de seleccionar un operador de comparación para el campo Nombre del cliente. Puede elegir que se muestren los nombres de los clientes que son iguales a, menores que, mayores que, menores o iguales que, iguales o mayores que o que no son iguales que el valor de cadena especificado.

La fórmula se pasa como variable de cadena a la propiedad SelectionFormula de la clase CrystalReportViewer. Una vez establecida la propiedad, el informe de Crystal que enlaza con el control CrystalReportViewer se filtra antes de mostrarse.

Continúe con Crear un informe con una fórmula de selección.

Crear un informe con una fórmula de selección

En esta sección, va a crear un informe que obtenga su información de la base de datos de ejemplo de Microsoft Access que se incluye con Crystal Reports.

Para crear un informe con datos seguros de la base de datos Northwind

Nota Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La Configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, y éste no se podrá completar sin dicha configuración. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.

1. En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita, elija Agregar y, a continuación, haga clic en Agregar nuevo elemento.

2. En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.

3. En el campo Nombre, especifique el nombre "CustomersBySalesName.rpt" y haga clic en Agregar.

Nota En Visual Studio .NET 2002 o 2003, el botón se denomina Abrir.

Si no se ha registrado anteriormente, se le pedirá que se registre. Para saber cómo registrarse, vea Registro y código de clave de Crystal Reports.

4. En el panel Crear un nuevo documento de Crystal Report del cuadro de diálogo Galería de Crystal Report, seleccione Usar asistente de informes.

5. En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.

Page 50: Tutoriales y Codigo de Ejemplo Crystal Reports

6. En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de informes estándar, expanda la carpeta Crear nueva conexión.

Nota En Visual Studio .NET 2002 o 2003, donde Crystal Reports no se ha actualizado a la versión completa, no existe la carpeta Crear nueva conexión; el contenido se mostrará en el nivel superior.

7. En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).8. En la ventana ODBC (RDO), seleccione la entrada DSN de ODBC correcta para su versión de

Crystal Reports, como se explica en Entrada DSN de ODBC para la base de datos de ejemplo Xtreme y, a continuación, haga clic en Finalizar.

Se expandirá la carpeta ODBC (RDO) y mostrará la base de datos de ejemplo Xtreme.

9. Expanda el nodo Tablas y, a continuación, haga doble clic en la tabla Cliente para mover la tabla al panel Tablas seleccionadas y, a continuación, haga clic en Siguiente.

10. Expanda la tabla Cliente y, a continuación, haga clic y presione CTRL en Nombre del cliente y Ventas del año pasado.

11. Haga clic en el símbolo > para mover estos campos al panel Campos para mostrar y, a continuación, haga clic en Siguiente.

12. En el panel Campos disponibles, en Campos del informe, haga doble clic en Customer.Customer Name, haga doble clic en el símbolo > para mover el campo al panel Agrupar por y, a continuación, haga clic en Finalizar.

Se crea el informe CustomersBySalesName y se carga en la ventana principal de Visual Studio.

Después, cree una fórmula de selección para filtrar los datos basándose en el valor del campo Ventas del año pasado.

Para crear una fórmula de selección basada en las ventas del año pasado

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código para ver la clase de código subyacente de este formulario

Web Forms o Windows Forms.3. En los sitios Web, en el método ConfigureCrystalReports() (el que ha creado en

Configuración de proyectos), cree un bloque condicional Not IsPostBack.

[Visual Basic]

If Not IsPostBack Then

End If

[C#]

if(!IsPostBack){}

Nota El bloque condicional Not IsPostBack encapsula el código que se debería ejecutar sólo la primera vez que se carga la página.

4. En los sitios Web, agregue las siguientes líneas de código en el bloque condicional Not IsPostBack.

Page 51: Tutoriales y Codigo de Ejemplo Crystal Reports

En los proyectos de Windows, agregue el código al método ConfigureCrystalReports(), sin el bloque condicional Not IsPostBack.

a. Especifique la fórmula para seleccionar sólo los registros cuyo valor del campo Ventas del año pasado sea mayor que $11000,00 y cuyos nombres de clientes empiecen por la letra "A".

[Visual Basic]

Dim mySelectFormula As String = "{Customer.Last Year's Sales} > 11000.00 " _& "AND Mid({Customer.Customer Name}, 1, 1) = ""A"" "

[C#]

string selectFormula = "{Customer.Last Year's Sales} > 11000.00 "+ "AND Mid({Customer.Customer Name}, 1, 1) = \"A\"";

b. Asigne la cadena de la fórmula de selección a la propiedad SelectionFormula del control CrystalReportViewer.

[Visual Basic]

myCrystalReportViewer.SelectionFormula = mySelectFormula

[C#]

crystalReportViewer.SelectionFormula = selectFormula;

Continúe con Enlazar el informe.

Enlazar el informe

Cuando siguió las instrucciones de la sección Configuración de proyectos para preparase para este tutorial, colocó un control CrystalReportViewer en el formulario Web Forms o Windows Forms. En los pasos anteriores, agregó un informe CustomersBySalesName y una fórmula de selección al proyecto.

En esta sección, va a enlazar la ruta de directorio de archivos del informe CustomersBySalesName al control CrystalReportViewer. Después, va a comprobar si el informe se muestra correctamente con los registros filtrados por la fórmula de selección.

Para enlazar la ruta de directorio de archivos del informe CustomersBySalesName al control CrystalReportViewer

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código para ver la clase de código subyacente de este formulario

Web Forms o Windows Forms.3. Busque el método ConfigureCrystalReports(), que ha creado en Configuración de proyectos.4. Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al

informe local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:

• Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena en el método Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco duro en tiempo de ejecución.

[Visual Basic]

Page 52: Tutoriales y Codigo de Ejemplo Crystal Reports

Dim reportPath As String = Server.MapPath("CustomersBySalesName.rpt")

[C#]

string reportPath = Server.MapPath("CustomersBySalesName.rpt");

• Para un proyecto para Windows, concatene la propiedad Application.StartupPath con una barra invertida y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo ejecutable de Windows.

Nota En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.

[Visual Basic]

Dim reportPath As String = Application.StartupPath & "\" & "CustomersBySalesName.rpt"

[C#]

string reportPath = Application.StartupPath + "\\" + "CustomersBySalesName.rpt";

5. Asigne la ruta del directorio de archivos del informe NorthwindCustomers a la propiedad ReportSource del control CrystalReportViewer.

[Visual Basic]

myCrystalReportViewer.ReportSource = reportPath

[C#]

crystalReportViewer.ReportSource = reportPath;

Para probar la fórmula de selección del informe CustomersBySalesName

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. Si usa un informe no incrustado en un proyecto para Windows, localice el archivo ejecutable de

Windows compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el informe en dicho subdirectorio.

Nota Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.

4. En el menú Depurar, haga clic en Iniciar.

Nota Si está desarrollando un sitio Web en Visual Studio 2005 y es la primera vez que ha iniciado la depuración, aparecerá un cuadro de diálogo en el que se indica que el archivo Web.config se debe modificar. Haga clic en el botón Aceptar para habilitar la depuración.

El informe de Crystal muestra cuatro registros de clientes: Alley Cat Cycles, Ankara Bicycle Company, Arsenault et Maurier y Athens Bicycle Co.

5. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Page 53: Tutoriales y Codigo de Ejemplo Crystal Reports

Continúe con Agregar controles para usarlos en la fórmula de selección.

Agregar controles para usarlos en la fórmula de selección

En esta sección, va a agregar controles para cambiar dinámicamente los valores utilizados en la fórmula de selección. Para el campo Ventas del año pasado, va a agregar un cuadro de texto para especificar el valor mínimo de ventas que se va a mostrar en el informe de Crystal. Para el campo Nombre del cliente, va a agregar un control DropDownList y TextBox para especificar los nombres de los clientes que se van a mostrar.

Para agregar controles con el fin de utilizarlos en la fórmula de selección

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Diseñador.3. Si está desarrollando un sitio Web, realice las siguientes acciones:

a. Haga clic en el control CrystalReportViewer para seleccionarlo.b. Presione la FLECHA IZQUIERDA del teclado de modo que aparezca un cursor parpadeante

y, a continuación, presione INTRO tres veces.

El control CrystalReportViewer bajará tres líneas.

1. Si está desarrollando un proyecto de Windows, realice las siguientes acciones: a. Haga clic en el control CrystalReportViewer para seleccionarlo.b. En la ventana Propiedades, establezca el valor de Acoplar en "Inferior".c. Ajuste el tamaño del control CrystalReportViewer, para que aparezcan tres líneas

aproximadamente sobre él.d. En la ventana Propiedades, establezca el valor de Delimitador en "Superior, inferior,

izquierdo, derecho".2. Si está desarrollando un sitio Web, en la primera línea escriba, "Especifique el valor mínimo de

las ventas del año pasado: $".3. Si está desarrollando un proyecto de Windows, realice las siguientes acciones:

a. En Cuadro de herramientas, arrastre un control Label hasta la parte superior del formulario.

b. En la ventana Propiedades, establezca el valor de la propiedad Text en "Especifique el valor mínimo de las ventas del año pasado: $".

4. En Cuadro de herramientas, arrastre un control TextBox hasta la derecha del texto.5. Seleccione el control TextBox y, a continuación, desde la ventana Propiedades, siga estos

pasos:

Establezca el valor de ID (o Nombre) en "lastYearsSales". Establezca el valor de Text en "11000,00".

2. Si está desarrollando un sitio Web, en la segunda línea, escriba "Mostrar el nombre de los clientes".

3. Si está desarrollando un proyecto de Windows, realice las siguientes acciones:

a. En Cuadro de herramientas, arrastre un control Label hasta la segunda línea del formulario.

b. En la ventana Propiedades, establezca el valor de la propiedad Text en "Mostrar el nombre de los clientes".

6. En Cuadro de herramientas, arrastre un control DropDownList (ComboBox para un proyecto de Windows) hasta la derecha del texto.

7. Seleccione el control DropDownList (ComboBox) y, a continuación, en la ventana Propiedades, establezca el valor de ID (o Nombre) en "selectOperatorList".

Page 54: Tutoriales y Codigo de Ejemplo Crystal Reports

8. En Cuadro de herramientas, arrastre un control TextBox hasta la derecha del control DropDownList.

9. Seleccione el control TextBox y, a continuación, desde la ventana Propiedades, siga estos pasos:

Establezca el valor de ID (o Nombre) en "customerName". Establezca el valor de Text en "A".

2. En el Cuadro de texto, arrastre un control Button hasta la tercera línea del formulario y sobre el control CrystalReportViewer.

3. Seleccione el control Button y, a continuación, desde la ventana Propiedades, siga estos pasos: Establezca el valor de ID (o Nombre) en "redisplay". Establezca el valor de Text en "Volver a mostrar el informe".

Continúe con Establecer la fórmula de selección manualmente en código.

Establecer la fórmula de selección manualmente en código

Ya está preparado para agregar código para modificar la fórmula de selección en la clase de código subyacente.

Para codificar la fórmula de selección

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, seleccione Diseñador.3. Haga doble clic en Volver a mostrar el informe.

Aparece la clase de código subyacente del informe y muestra que se ha generado automáticamente un método de evento redisplay_Click().

4. En la fórmula de selección, cree una variable de cadena que incluya los valores desde los controles TextBox.

La fórmula de selección es parecida al texto escrito en el método ConfigureCrystalReports(). En vez del valor de mínimo de ventas de $11000,00, utilice el valor del control TextBox de lastYearsSales. Para el campo Nombre del cliente, utilice el valor del control TextBox de customerName.

[Visual Basic]

Dim mySelectFormula As String = "{Customer.Last Year's Sales} > " & lastYearsSales.Text _& " AND Mid({Customer.Customer Name}, 1) > """ & customerName.Text & """"

[C#]

string selectFormula = "{Customer.Last Year's Sales} > " + lastYearsSales.Text+ " AND Mid({Customer.Customer Name}, 1) > \"" + customerName.Text + "\"";

5. Asigne la variable de cadena a la propiedad SelectionFormula del control CrystalReportViewer.

[Visual Basic]

myCrystalReportViewer.SelectionFormula = mySelectFormula

Page 55: Tutoriales y Codigo de Ejemplo Crystal Reports

[C#]

crystalReportViewer.SelectionFormula = selectFormula;

6. Vuelva a enlazar el informe CustomerBySalesName a la propiedad ReportSource del control CrystalReportViewer.

Nota La ruta de directorio de archivos que se muestra aquí es la de un proyecto de Visual Studio 2005. [Nombre_de_proyecto] se reemplaza por el nombre del proyecto Web o de Windows. [Nombre_de_usuario] se reemplaza por el nombre de conexión del equipo.

La ruta predeterminada del proyecto de un sitio Web es la siguiente:

[Visual Basic]

myCrystalReportViewer.ReportSource = "C:\WebSites\ProjectName\CustomersBySalesName.rpt"

[C#]

crystalReportViewer.ReportSource = "C:\\WebSites\\ProjectName\\CustomersBySalesName.rpt";

La ruta predeterminada de un proyecto de Windows es la siguiente:

[Visual Basic]

myCrystalReportViewer.ReportSource = "C:\Documents and Settings\UserName\My Documents\Visual Studio\Projects\ProjectName\CustomersBySalesName.rpt"

[C#]

crystalReportViewer.ReportSource = "C:\\Documents and Settings\\UserName\\My Documents\\Visual Studio\\Projects\\ ProjectName\\CustomersBySalesName.rpt";

Ya ha creado una fórmula de selección que puede modificar en tiempo de ejecución.

Para probar la fórmula de selección

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.4. En el control TextBox de lastYearsSales, escriba "200000".5. En el control TextBox de customerName, escriba "SAB".6. Haga clic en Volver a mostrar el informe.

El informe de Crystal muestra tres registros de clientes: SAB Mountain, Tek Bikes y Tienda de Bicicletas El Pardo.

Se muestran sólo los registros de clientes con nombres mayores que "SAB" y ventas del año pasado mayor que "200000".

7. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Continúe con Utilizar un control DropDownList para modificar la fórmula de selección.

Page 56: Tutoriales y Codigo de Ejemplo Crystal Reports

Utilizar un control DropDownList para modificar la fórmula de selección

En esta sección, va a llenar el control DropDownList con operadores de comparación. Va a crear una enumeración que contiene los operadores de comparación.

El control DropDownList selecciona si desea mostrar los nombres de los clientes que sean iguales a, menor que, mayor que, menor o igual que, mayor o igual o no es igual que el texto especificado en el control TextBox.

En el método de evento redisplay_Click(), va a modificar la cadena actualmente asignada a la propiedad SelectionFormula del control CrystalReportViewer.

Para crear la enumeración CeComparisonOperator

1. En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita, elija Agregar y, a continuación, haga clic en Agregar nuevo elemento.

2. En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase desde la vista Plantillas.3. En el campo Nombre, escriba "CeComparisonOperator" y, a continuación, haga clic en Agregar.

Nota En Visual Studio 2005, puede que se le pida que coloque esta clase en un directorio de código. Haga clic en el botón Sí.

4. En la firma de clase, cambie la palabra clase por enum para convertir la clase en una enumeración.

En un proyecto de Windows de C# para Visual Studio 2005, también debe cambiar el espacio de nombres al nombre del proyecto.

Nota En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.

5. Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que se proporciona en la versión de C# del código.

6. En la enumeración, especifique los valores:

[Visual Basic]

EqualToLessThanGreaterThanLessThan_or_EqualToGreaterThan_or_EqualToNot_EqualTo

[C#]

EqualTo,LessThan,GreaterThan,LessThan_or_EqualTo,GreaterThan_or_EqualTo,Not_EqualTo

Page 57: Tutoriales y Codigo de Ejemplo Crystal Reports

Los siguientes procedimientos explican cómo enlazar la enumeración CeComparisonOperator al control DropDownList de un sitio Web o un proyecto para Windows. Siga las instrucciones de uno de los siguientes procedimientos de varios pasos.

Para llenar el control DropDownList desde la enumeración CeComparisonOperator para un sitio Web

1. Abra el formulario Web Forms.2. En el menú Ver, haga clic en Código.3. En el bloque condicional Not IsPostBack del método ConfigureCrystalReports(), delante

de la declaración de cadena de la fórmula de selección, establezca el valor de la propiedad DataSource del control DropDownList en los valores de la enumeración CeComparisonOperator.

[Visual Basic]

selectOperatorList.DataSource = System.Enum.GetValues(GetType(CeComparisonOperator))

[C#]

selectOperatorList.DataSource = System.Enum.GetValues(typeof(CeComparisonOperator));

4. Ahora, llame al método DataBind() del control DropDownList de selectOperatorList para enlazar los valores al control.

[Visual Basic]

selectOperatorList.DataBind()

[C#]

selectOperatorList.DataBind();

Para llenar el control DropDownList desde la enumeración CeComparisonOperator para un proyecto de Windows

1. Abra el formulario Windows Forms.2. En el menú Ver, haga clic en Código.3. En el método ConfigureCrystalReports(), delante de la declaración de cadena de la fórmula

de selección, establezca el valor de la propiedad DataSource del control ComboBox de selectOperatorList en los valores de la enumeración CeComparisonOperator.

[Visual Basic]

selectOperatorList.DataSource = System.Enum.GetValues(GetType(CeComparisonOperator))

[C#]

selectOperatorList.DataSource = System.Enum.GetValues(typeof(CeComparisonOperator));

Después, va a crear el método de ayuda GetSelectedCompareOperator() para que devuelva el índice seleccionado como cadena que representa un signo de operador de comparación.

Page 58: Tutoriales y Codigo de Ejemplo Crystal Reports

Para crear el método de ayuda GetSelectedCompareOperator()

1. En la parte inferior de la clase, cree un método de ayuda privado denominado GetSelectedCompareOperator() que devuelva una variable de cadena.

[Visual Basic]

Private Function GetSelectedCompareOperator() As String

End Function

[C#]

private string GetSelectedCompareOperator(){}

2. En el método, cree una instrucción "Select Case" [Visual Basic] o "switch" [C#] que haga referencia a los miembros de la enumeración CeComparisonOperator y devuelva el signo del operador de comparación como variable de cadena.

[Visual Basic]

Select Case selectOperatorList.SelectedIndex Case CeComparisonOperator.EqualTo return "=" Case CeComparisonOperator.LessThan return "<" Case CeComparisonOperator.GreaterThan return ">" Case CeComparisonOperator.LessThan_or_EqualTo return "<=" Case CeComparisonOperator.GreaterThan_or_EqualTo return ">=" Case CeComparisonOperator.Not_EqualTo return "<>" Case Else return "="End Select

[C#]

switch ((CeComparisonOperator)selectOperatorList.SelectedIndex){ case CeComparisonOperator.EqualTo: return "="; case CeComparisonOperator.LessThan: return "<"; case CeComparisonOperator.GreaterThan: return ">"; case CeComparisonOperator.LessThan_or_EqualTo: return "<="; case CeComparisonOperator.GreaterThan_or_EqualTo: return ">="; case CeComparisonOperator.Not_EqualTo: return "<>"; default: return "=";}

Page 59: Tutoriales y Codigo de Ejemplo Crystal Reports

En el método de evento redisplay_Click(), se utiliza actualmente un signo "mayor que" (">") para la selección del campo Nombre del cliente. A continuación, aprenderá a cambiar el signo al operador de comparación seleccionado desde el control DropDownList. El signo seleccionado se devuelve como cadena al llamar al método de ayuda GetSelectedCompareOperator().

Para modificar el operador de comparación de Nombre del cliente asignado a la propiedad SelectionFormula

1. En la parte superior del método de evento redisplay_Click(), llame al método de ayuda GetSelectedCompareOperator() y asigne el resultado a una variable de cadena.

[Visual Basic]

Dim mySelectedOperator As String = GetSelectedCompareOperator()

[C#]

string selectedOperator = GetSelectedCompareOperator();

2. Para la variable de cadena de la fórmula de selección, reemplace el signo "mayor que" (">") por la cadena del operador seleccionado.

[Visual Basic]

Dim mySelectFormula As String = "{Customer.Last Year's Sales} > " & lastYearsSales.Text _& " AND Mid({Customer.Customer Name}, 1) " & mySelectedOperator & " """ & customerName.Text & """"

[C#]

string selectFormula = "{Customer.Last Year's Sales} > " + lastYearsSales.Text+ " AND Mid({Customer.Customer Name}, 1) " + selectedOperator + " \"" + customerName.Text + "\"";

Ha creado una fórmula de selección que depende de los valores especificados para el campo Ventas del año pasado y el campo Nombre del cliente.

Ahora puede generar y probar la fórmula de selección.

Para probar la fórmula de selección del informe CustomersBySalesName

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

a. En el control TextBox de lastYearsSales, escriba "40000".b. En el control TextBox de customerName, escriba "Athens Bicycle Co.".c. En DropDownList, seleccione "LessThan".d. Haga clic en Volver a mostrar el informe.

El informe de Crystal muestra dos registros de clientes: Alley Cat Cycles y Ankara Bicycle Company.

4. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.

Page 60: Tutoriales y Codigo de Ejemplo Crystal Reports

Continúe con Conclusión.

Conclusión

Ha creado correctamente una fórmula de selección para modificar los registros mostrados en el informe de Crystal. Ha aprendido a leer los valores de los controles TextBox y DropDownList para modificar la fórmula de selección. También ha aprendido a crear una enumeración de operadores de comparación que le permite seleccionar la forma en la que desea filtrar los datos.

Tutorial: Personalizar el control CrystalReportViewer

En este tutorial, aprenderá a personalizar la presentación del informe. Asimismo, aprenderá a seleccionar un número de página o un factor de zoom específicos y a buscar texto en el informe.

Page 61: Tutoriales y Codigo de Ejemplo Crystal Reports

En un sitio Web, va a aprender a seleccionar un modo de impresión y a personalizar un borde.

Haga clic en el vínculo adecuado para pasar a esa sección:

• Introducción• Crear una tabla de configuración personalizada• Elementos de barra de herramientas y de informe del control CrystalReportViewer• Agregar un mecanismo para mostrar u ocultar los elementos de barra de herramientas y de

informe• Configurar los controles ListBox de un sitio Web• Configurar los controles ListBox de un proyecto para Windows• Modificar el color de fondo del informe• Agregar código para seleccionar una página del informe• Modificar el factor de Zoom• Buscar en un informe• Agregar un borde al informe de un sitio Web• Configurar la conservación de Session de un sitio Web• Modificar los gráficos y las hojas de estilo en cascada de un sitio Web• Conclusión• Información de código de ejemplo

Introducción

En este tutorial, aprenderá a personalizar el aspecto del control CrystalReportViewer mediante el uso de las propiedades desde su clase subyacente.

Asimismo, aprenderá a utilizar los métodos de selección de página, zoom, búsqueda e impresión.

Para comenzar, va a aprender a personalizar la barra de herramientas de CrystalReportViewer. Necesita un control ListBox que almacene las propiedades disponibles para la barra de herramientas. Sólo las propiedades seleccionadas desde este control se muestran en la barra de herramientas de CrystalReportViewer.

A continuación, agregará un segundo control ListBox para almacenar los elementos del informe. En los sitios Web, también puede elegir mostrar todas las páginas del informe como una sola página o como páginas separadas.

Aprenderá a personalizar el color de fondo mediante un control DropDownList.

Después, aprenderá a seleccionar la página del informe que desee ver. Necesita un control TextBox para especificar el número de página y un control Button para volver a cargar el informe en la página seleccionada. Necesita, también, los controles TextBox y Button para modificar el factor de zoom y para buscar texto en el informe.

En los sitios Web, tiene acceso a propiedades del control CrystalReportViewer que no están disponibles en los proyectos para Windows: una propiedad para elegir el modo de impresión y otras propiedades para cambiar el ancho, estilo y color de los bordes.

Continúe con Crear una tabla de configuración personalizada.

Crear una tabla de configuración personalizada

Page 62: Tutoriales y Codigo de Ejemplo Crystal Reports

En esta sección, creará y configurará una tabla (en un sitio Web) o un control TableLayoutPanel (en un proyecto para Windows) para albergar los distintos controles que forman la tabla de configuración personalizada.

Debido a que los sitios Web y los proyectos para Windows usan un tipo de tabla diferente, seleccione el procedimiento con pasos que corresponda a su sitio Web o proyecto para Windows.

Para crear una tabla de configuración personalizada para un sitio Web

Nota Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La Configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, y éste no se podrá completar sin dicha configuración. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.

1. Abra la página Default.aspx (el formulario Web Forms) en la vista Diseño.2. Haga clic en el control CrystalReportViewer para seleccionarlo.3. Presione la flecha izquierda para mover el cursor a la izquierda del control

CrystalReportViewer y presione Intro.4. Presione la flecha arriba para mover el cursor a la línea vacía situada encima del control

CrystalReportViewer.5. En el menú Diseño, haga clic en Insertar tabla.6. En el cuadro de diálogo Insertar tabla, seleccione el botón de radio Personalizado.

Nota El botón de radio Personalizado ya está seleccionado de forma predeterminada.

7. En el panel Diseño, active la casilla de verificación Ancho y deje el valor en un 100%.8. Aumente la cuenta de Filas a 6 y la de Columnas a 4.9. En el panel Atributos, active la casilla de verificación Borde, y aumente la cuenta a 1.10. Haga clic en el botón Propiedades de celda...11. En el cuadro de diálogo Propiedades de celda, en el panel Diseño, establezca el cuadro

combinado Alineación vertical a Superior.12. Active la casilla de verificación Sin ajuste de línea y, a continuación, haga clic en Aceptar.13. Haga clic en Aceptar de nuevo para cerrar el cuadro de diálogo Insertar tabla.

Ahora ya estará preparado para agregar controles personalizados a esta tabla para el sitio Web.

Continúe con Elementos de barra de herramientas y de informe del control CrystalReportViewer

Para crear una tabla de configuración personalizada para un proyecto para Windows

Nota Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La Configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, y éste no se podrá completar sin dicha configuración. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.

1. Abra el formulario Windows Forms en la vista Diseño.2. Haga clic en la barra de título Formulario para seleccionar todo el formulario y, a continuación,

arrastre la esquina inferior derecha del formulario para ampliarlo de modo que llene el área principal.

3. Haga clic en el control CrystalReportViewer para seleccionarlo.4. En la ventana Propiedades, establezca Dock en "Bottom".5. En la ventana Propiedades, establezca Anchor en "Top, Bottom, Left, Right".

Page 63: Tutoriales y Codigo de Ejemplo Crystal Reports

6. En Cuadro de herramientas, arrastre un control TableLayoutPanel hasta la parte superior izquierda del formulario Windows Forms.

Aparecerá un control TableLayoutPanel, mostrando dos columnas y dos filas.

7. Si el panel Tarea inteligente no está abierto, haga clic en el botón triangular de la esquina superior derecha del control TableLayoutPanel.

Se abrirá el panel Tarea inteligente denominado "TableLayoutPanel Tasks".

8. En la etiqueta TableLayoutPanel Tasks, haga clic en el vínculo Editar filas y columnas.9. En el cuadro de diálogo Estilos de columna y fila, en el cuadro combinado Tipo de miembro,

seleccione Columnas.10. Haga clic en Agregar hasta que tenga un total de cuatro columnas.11. Para cada columna, realice lo siguiente:

a. Seleccione la columna.b. En el panel Tipo de tamaño seleccione Porcentaje.c. Establezca cada valor al 25%.

12. En el cuadro combinado Tipo de miembro, seleccione Columnas.13. Haga clic en Agregar hasta que tenga un total de cinco filas.

Nota La tabla de un proyecto para Windows requiere una fila menos que la tabla de un sitio Web, porque hay menos opciones configurables en un control CrystalReportViewer de un proyecto para Windows.

14. Para cada fila, realice lo siguiente: a. Seleccione la fila.b. En el panel Tipo de tamaño seleccione Porcentaje.c. Establezca el valor de la primera fila al 40%, y para las filas subsiguientes establezca el

valor al 15%.

Nota (1 x 40%) y (4 x 15%) = 100% de espacio disponible.

15. Haga clic en Aceptar.16. Cierre la etiqueta TableLayoutPanel Tasks.17. Arrastre la esquina inferior derecha del control TableLayoutPanel para agrandar la tabla hasta

que llene el espacio creado encima del control CrystalReportViewer.

Ahora ya estará preparado para agregar controles personalizados a esta tabla para el proyecto para Windows.

Continúe con Elementos de barra de herramientas y de informe del control CrystalReportViewer

Elementos de barra de herramientas y de informe del control CrystalReportViewer

En este tutorial manipulará los distintos elementos de barra de herramientas y de informe del control CrystalReportViewer.

Elementos de visor

Los elementos predeterminados del control CrystalReportViewer varían ligeramente para los sitios Web y para los proyectos para Windows:

• Tanto para sitios Web como para proyectos para Windows:

Page 64: Tutoriales y Codigo de Ejemplo Crystal Reports

• Barra de herramientas: muestra una barra de herramientas encima del área principal del informe. Los elementos individuales dentro de la barra de herramientas se controlan por separado.

Nota Para obtener más información, vea la sección siguiente relativa a los elementos de barra de herramientas.

• Árbol de grupo: muestra los encabezados de cada grupo del informe, de forma parecida al árbol de grupo de un informe, que aparece en el panel de la columna izquierda de éste.

• Sólo para sitios Web: • Página principal: muestra el informe en el área principal de la página.• Habilitar páginas separadas: determina si el informe se muestra en una única página Web

o como páginas formateadas independientes.• Sólo para proyectos para Windows:

• Barra de estado: muestra el número de página actual y otra información sobre el informe, en la parte inferior del área del informe.

Elementos de la barra de herramientas

Los elementos predeterminados de la barra de herramientas varían ligeramente para los sitios Web y para los proyectos para Windows:

• Tanto para sitios Web como para proyectos para Windows: • Botón Árbol de grupo: muestra u oculta la sección del árbol de grupo del informe.• Exportar: guarda el informe de Crystal en otro formato de archivo, como los archivos RPT,

PDF, DOC, XLS o RTF.• Imprimir: imprime el informe de Crystal en un archivo PDF o llama al cuadro de diálogo

Imprimir.• Exploración de páginas: le permite seleccionar la página siguiente, anterior, última o

primera para verla.• Ir a página: le permite escribir el número de página que desee ver.• Buscar: le permite escribir en una cadena que desee buscar en el informe.• Factor de zoom: le permite seleccionar el factor de zoom del informe.

• Sólo para sitios Web: • Lista de vista (sólo para sitios Web): elige la vista que se va a mostrar del informe, (por

ejemplo, subinformes, etc.).• Sintetizar: abre una página con información más específica que el tema actual.• Logotipo de Crystal: muestra el logotipo de producto de Crystal Reports.

• Sólo para proyectos para Windows: • Actualizar: vuelve a mostrar el informe.• Cerrar vista actual: cierra la vista actual del informe si están abiertas varias vistas.

Continúe con Agregar un mecanismo para mostrar u ocultar los elementos de barra de herramientas y de informe

Agregar un mecanismo para mostrar u ocultar los elementos de barra de herramientas y de informe

En esta sección aprenderá a agregar un mecanismo que determina qué elementos de la barra de herramientas CrystalReportViewer se muestran u ocultan.

Empezará agregando los controles ListBox y Button a la tabla en el formulario Web Forms o Windows Forms.

A continuación, creará dos enumeraciones que muestran una lista de los elementos del informe y de la barra de herramientas, y llenará cada control ListBox con los valores de una de las enumeraciones.

Page 65: Tutoriales y Codigo de Ejemplo Crystal Reports

Después, codificará el evento de clic del control Button para actualizar los elementos de la barra de herramientas.

Dentro del controlador de eventos las propiedades de la clase CrystalReportViewer se establecen basándose en los dos controles ListBox. Si se selecciona un elemento de ListBox, la propiedad de la barra de herramientas se establece en True.

Más tarde en este tutorial, se utilizará el control Button para actualizar selecciones adicionales.

En tiempo de ejecución, puede seleccionar qué elementos del informe y de la barra de herramientas desea mostrar.

Empezará agregando los controles a la tabla en la parte superior del formulario Web Forms o Windows Forms.

Para agregar los controles ListBox y Button

1. Abra el formulario Web Forms o Windows Forms en la vista Diseño.2. En el Cuadro de herramientas, arrastre un control Label a la primera fila y la columna uno de

la tabla.3. Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la

propiedad Text en "Seleccionar elementos de informe para mostrar".4. En el Cuadro de herramientas, arrastre un control ListBox a la primera fila y la columna dos

de la tabla.5. Seleccione el control ListBox y, a continuación, desde la ventana Propiedades, siga estos

pasos: • Establezca el ID a "listCRVReport."• Establezca SelectionMode en "Multiple" (en un proyecto de Windows, "MultiExtended").

6. En el Cuadro de herramientas, arrastre un segundo control Label a la primera fila y la columna tres de la tabla.

7. Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la propiedad Text en "Seleccionar elementos de barra de herramientas para mostrar".

8. En el Cuadro de herramientas, arrastre un control Button a la tercera fila y la columna uno de la tabla.

9. Haga clic en el control Button para seleccionarlo.10. En la ventana Propiedades:

• Establezca ID en "redisplay".• Establezca Text como "Volver a mostrar el informe".

11. En un proyecto para Windows, ajuste el tamaño del control Button para mostrar el texto completo del botón.

Los pasos siguientes varían, dependiendo de si se crea un sitio Web o un proyecto para Windows. Elija uno de los temas siguientes:

• Configurar los controles ListBox de un sitio Web• Configurar los controles ListBox de un proyecto para Windows

Configurar los controles ListBox de un proyecto para Windows

Esta sección explica cómo configurar los controles ListBox de un proyecto para Windows. Si va a crear un sitio Web, vea Configurar los controles ListBox de un sitio Web.

Ahora puede crear el controlador de eventos de clic para el control Button y, a continuación, agregar código a este controlador de eventos. El controlador de eventos define varios valores booleanos para las

Page 66: Tutoriales y Codigo de Ejemplo Crystal Reports

propiedades de barra de herramientas de la clase CrystalReportViewer basándose en las selecciones del usuario en el control ListBox.

Antes de crear este controlador de eventos, deberá crear dos enumeraciones: CeWinCRVReportOptions y CeWinCRVToolbarOptions.

Estas enumeraciones proporcionan una lista de elementos de informe y de barra de herramientas seleccionables.

Para crear la enumeración CeWinCRVReportOptions

1. En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita, elija Agregar y, a continuación, haga clic en Clase.

2. En el cuadro de diálogo Agregar nuevo elemento, en el campo Nombre, escriba "CeWinCRVReportOptions" y, a continuación, haga clic en Agregar.

Nota En Visual Studio 2005, puede que se le pida que coloque esta clase en un directorio App_Code. Haga clic en el botón Sí.

3. En la firma de clase, cambie la palabra clase por "enum" para convertir la clase en una enumeración.

Nota En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.

4. Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que se proporciona en la versión de C# del código.

5. En la enumeración, especifique los valores:

[Visual Basic]

ToolbarGroup_TreeStatus_Bar

[C#]

Toolbar,Group_Tree,Status_Bar

6. En el menú Archivo, haga clic en Guardar todo.

Para crear la enumeración CeWinCRVToolbarOptions

1. En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita, elija Agregar y, a continuación, haga clic en Clase.

2. En el cuadro de diálogo Agregar nuevo elemento, en el campo Nombre, escriba "CeWinCRVToolbarOptions" y, a continuación, haga clic en Agregar.

Nota En Visual Studio 2005, puede que se le pida que coloque esta clase en un directorio App_Code. Haga clic en el botón Sí.

3. En la firma de clase, cambie la palabra clase por "enum" para convertir la clase en una enumeración.

Page 67: Tutoriales y Codigo de Ejemplo Crystal Reports

Nota En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.

4. Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que se proporciona en la versión de C# del código.

5. En la enumeración, especifique los valores:

[Visual Basic]

Page_Navigation_ButtonGo_to_Page_ButtonClose_View_ButtonPrint_ButtonRefresh_ButtonExport_ButtonGroup_Tree_ButtonZoom_ButtonSearch_Button

[C#]

Page_Navigation_Button,Go_to_Page_Button,Close_View_Button,Print_Button,Refresh_Button,Export_Button,Group_Tree_Button,Zoom_Button,Search_Button

6. En el menú Archivo, haga clic en Guardar todo.

Ahora llene los controles ListBox con los valores de la enumeración, que representan las propiedades disponibles para la barra de herramientas de CrystalReportViewer.

Para llenar los controles ListBox a partir de las enumeraciones

1. Abra el formulario Windows Forms.2. En el menú Ver, haga clic en Código.3. En el método ConfigureCrystalReports(), establezca el valor de la propiedad DataSource del

control ListBox de listCRVReport en los valores de la enumeración CeWinCRVReportOptions.

Nota El método ConfigureCrystalReports() lo creó durante Configuración de proyectos al comienzo de este tutorial. Para completar este tutorial correctamente, deberá empezar realizando Configuración de proyectos.

[Visual Basic]

listCRVReport.DataSource = System.Enum.GetValues(GetType(CeWinCRVReportOptions))

[C#]

listCRVReport.DataSource = System.Enum.GetValues(typeof(CeWinCRVReportOptions));

Page 68: Tutoriales y Codigo de Ejemplo Crystal Reports

4. Establezca el valor de la propiedad DataSource del control ListBox de listCRVToolbar en los valores de la enumeración CeWinCRVToolbarOptions.

[Visual Basic]

listCRVToolbar.DataSource = System.Enum.GetValues(GetType(CeWinCRVToolbarOptions))

[C#]

listCRVToolbar.DataSource = System.Enum.GetValues(typeof(CeWinCRVToolbarOptions));

5. Enlace el archivo Chart.rpt a la propiedad ReportSource del control CrystalReportViewer. Para obtener información sobre informes de muestra, vea Directorio de informes de muestra.

[Visual Basic]

myCrystalReportViewer.ReportSource = "C:\Program Files\Microsoft Visual Studio 8\Crystal Reports\Samples\es\Reports\Feature Examples\Chart.rpt"

[C#]

crystalReportViewer.ReportSource = "C:\\Program Files\\Microsoft Visual Studio 8\\Crystal Reports\\Samples\\es\\Reports\\Feature Examples\\Chart.rpt";

Ahora puede agregar código al evento de clic del control Button. El método de clic debe establecer los valores booleanos de los elementos de barra de herramientas y de informe de la clase CrystalReportViewer. Si se selecciona un elemento, el valor booleano establece en True, y se muestra el elemento de barra de herramientas o de informe. Si no se selecciona ninguna propiedad, el valor booleano se establece en False y no se muestra el elemento de barra de herramientas o de informe.

Para codificar el control Button que vuelve a mostrar el informe de un proyecto de Windows

1. Abra el formulario Windows Forms.2. En el menú Ver, haga clic en Diseñador.3. Haga doble clic en el control Button que vuelve a mostrar el informe.

Aparece la clase de código subyacente del informe y muestra que se ha generado automáticamente un método de evento redisplay_Click().

4. En el método de evento redisplay_Click(), llame al método GetSelected() y pase todos los elementos desde ListBox. El método GetSelected() devuelve un valor booleano para establecer las propiedades de barra de herramientas o de informe de CrystalReportViewer.

Nota Los elementos de barra de herramientas y de informe de CrystalReportViewer se establecen a sus valores correspondientes en las enumeraciones CeWinCRVReportOptions y CeWinCRVToolbarOptions.

[Visual Basic]

myCrystalReportViewer.ShowPageNavigateButtons = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Page_Navigation_Button)myCrystalReportViewer.ShowGotoPageButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Go_to_Page_Button)

Page 69: Tutoriales y Codigo de Ejemplo Crystal Reports

myCrystalReportViewer.ShowCloseButton = listCRVToolbar. GetSelected(CeWinCRVToolbarOptions.Close_View_Button)myCrystalReportViewer.ShowPrintButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Print_Button)myCrystalReportViewer.ShowRefreshButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Refresh_Button)myCrystalReportViewer.ShowExportButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Export_Button)myCrystalReportViewer.ShowGroupTreeButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Group_Tree_Button)myCrystalReportViewer.ShowZoomButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Zoom_Button)myCrystalReportViewer.ShowTextSearchButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Search_Button)

myCrystalReportViewer.DisplayToolbar = listCRVReport.GetSelected(CeWinCRVReportOptions.Toolbar)myCrystalReportViewer.DisplayGroupTree = listCRVReport.GetSelected(CeWinCRVReportOptions.Group_Tree)myCrystalReportViewer.DisplayStatusBar = listCRVReport.GetSelected(CeWinCRVReportOptions.Status_Bar)

[C#]

crystalReportViewer.ShowPageNavigateButtons = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Page_Navigation_Button));crystalReportViewer.ShowGotoPageButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Go_to_Page_Button));crystalReportViewer.ShowCloseButton = listCRVToolbar. GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Close_View_Button));crystalReportViewer.ShowPrintButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Print_Button));crystalReportViewer.ShowRefreshButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Refresh_Button));crystalReportViewer.ShowExportButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Export_Button));crystalReportViewer.ShowGroupTreeButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Group_Tree_Button));crystalReportViewer.ShowZoomButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Zoom_Button));crystalReportViewer.ShowTextSearchButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Search_Button));

crystalReportViewer.DisplayToolbar = listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Toolbar));crystalReportViewer.DisplayGroupTree = listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Group_Tree));crystalReportViewer.DisplayStatusBar = listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Status_Bar));

Ya está preparado para generar y ejecutar el proyecto con el fin de personalizar la barra de herramientas de CrystalReportViewer.

Page 70: Tutoriales y Codigo de Ejemplo Crystal Reports

Para probar el control Button que vuelve a mostrar el informe

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

Los controles ListBox de listCRVReport y listCRVToolbar muestran una lista completa de opciones de barra de herramientas y de informe de CrystalReportViewer.

4. En el control ListBox de opciones de barra de herramientas, seleccione "Page_Navigation_Button", "Print_Button" y "Export_Button".

5. En el control ListBox de opciones de informe, seleccione "Toolbar", "Group_Tree" y "Main_Page".6. Haga clic en Volver a mostrar el informe.

La página se vuelve a cargar para mostrar un control CrystalReportViewer con una barra de herramientas, un árbol de grupos y una página principal visibles. Dentro de la barra de herramientas, sólo están visibles los botones Exploración de páginas, Imprimir y Exportar.

7. Vuelva a Visual Studio 2005 y haga clic en Detener para salir del modo de depuración.

Continúe con Modificar el color de fondo del informe.

Modificar el color de fondo del informe

En esta sección, aprenderá a modificar el color de fondo del informe.

Para empezar, agregará un control DropDownList para la selección del color de fondo.

Para agregar controles para cambiar el color de fondo

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Diseñador.3. En el Cuadro de herramientas, arrastre un control Label a la segunda fila y a la columna uno

de la tabla.4. Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la

propiedad Text en "Seleccionar color de fondo".5. En Cuadro de herramientas, arrastre un control DropDownList (para sitios Web) o un control

ComboBox (para proyectos para Windows) a la segunda fila y a la columna dos de la tabla.6. Seleccione el control DropDownList/ComboBox y, a continuación, en la ventana Propiedades,

establezca el valor de ID/Nombre en "selectBackColor".

Ahora, debe agregar código al método ConfigureCrystalReports() para establecer los valores predeterminados de la lista de colores de fondo y de las casillas de verificación de los componentes del informe.

Para establecer los valores predeterminados de los controles

1. Abra el formulario Web Forms o Windows Forms.2. En el menú Ver, haga clic en Código.

A continuación, en el método ConfigureCrystalReports(), agregue código para establecer los valores predeterminados del control.

Page 71: Tutoriales y Codigo de Ejemplo Crystal Reports

Nota Si está creando un sitio Web, coloque estas líneas de código dentro del bloque condicional Not IsPostBack. Si está creando un proyecto Windows, coloque estas líneas de código en el área principal del método ConfigureCrystalReports().

3. Asigne la enumeración KnownColor a la propiedad DataSource del control DropDownList de selectBackColor.

[Visual Basic]

selectBackColor.DataSource = System.Enum.GetValues(GetType(KnownColor))

[C#]

selectBackColor.DataSource = System.Enum.GetValues(typeof(KnownColor));

4. En un sitio Web, enlace el origen de datos al control DropDownList de selectBackColor.

[Visual Basic]

selectBackColor.DataBind()

[C#]

selectBackColor.DataBind();

A continuación, agregue código al evento de clic Button para volver a mostrar el informe basándose en las selecciones de selectBackColor y DropDownList.

Este código varía según se trate de un sitio Web o de un proyecto para Windows. Seleccione el procedimiento apropiado a continuación para el sitio Web o el proyecto para Windows.

Para asignar la selección del color de fondo en un sitio Web

1. Abra el formulario Web Forms.2. En el menú Ver, haga clic en Código.3. Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#]

en la parte superior de la clase del espacio de nombres System.Drawing (si todavía no lo ha declarado).

[Visual Basic]

Imports System.Drawing

[C#]

using System.Drawing;

4. En el controlador de eventos redisplay_Click(), agregue el siguiente código:

En el control DropDownList de selectBackColor, recupere el elemento seleccionado como cadena y páselo al método FromName() de la clase Color. Asigne el valor de Color a la propiedad BackColor del control CrystalReportViewer.

[Visual Basic]

Page 72: Tutoriales y Codigo de Ejemplo Crystal Reports

myCrystalReportViewer.BackColor = Color.FromName(selectBackColor.SelectedItem.Text)

[C#]

crystalReportViewer.BackColor = Color.FromName(selectBackColor.SelectedItem.Text);

Ahora ya podrá probar el botón Volver a mostrar el informe. Pase a dicha sección, a continuación.

Para asignar la selección del color de fondo en un proyecto para Windows

1. Abra el formulario Windows Forms.2. En el menú Ver, haga clic en Código.3. Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#]

en la parte superior de la clase del espacio de nombres System.Drawing (si todavía no lo ha declarado).

[Visual Basic]

Imports System.Drawing

[C#]

using System.Drawing;

4. En el controlador de eventos redisplay_Click(), agregue el siguiente código:

Desde el control ComboBox de selectBackColor, recupere el elemento seleccionado y conviértalo en una instancia de KnownColor.

[Visual Basic]

Dim mySelectedKnownColor As KnownColor = CType(selectBackColor.SelectedItem, KnownColor)

[C#]

KnownColor selectedKnownColor = (KnownColor)selectBackColor.SelectedItem;

5. Cree un bloque condicional que compruebe que el color de fondo seleccionado no es transparente.

[Visual Basic]

If Not mySelectedKnownColor = KnownColor.Transparent Then

End If

[C#]

if (selectedKnownColor != KnownColor.Transparent){}

Page 73: Tutoriales y Codigo de Ejemplo Crystal Reports

6. Dentro del bloque If, pase la instancia de KnownColor al método FromKnownName() de la clase System.Drawing.Color. Asigne el valor de Color a la propiedad BackColor del control CrystalReportViewer.

[Visual Basic]

myCrystalReportViewer.BackColor = System.Drawing.Color.FromKnownColor(mySelectedKnownColor)

[C#]

crystalReportViewer.BackColor = System.Drawing.Color.FromKnownColor(selectedKnownColor);

Ahora ya podrá probar el botón Volver a mostrar el informe.

Para probar el control Button que vuelve a mostrar el informe

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

Se muestran los controles DropDownList y ComboBox, junto con los controles ListBox y Button agregados en el procedimiento anterior.

4. En el control DropDownList de selectBackColor, seleccione "Blue".

Nota Recuerde seleccionar los elementos de informe, especialmente Main_Page, para que esté visible

5. Haga clic en Volver a mostrar el informe.

La página se vuelve a cargar para mostrar el informe sobre un fondo azul.

6. Vuelva a Visual Studio 2005 y haga clic en Detener para salir del modo de depuración.

Continúe con Agregar código para seleccionar una página del informe.

Agregar código para seleccionar una página del informe

En esta sección, aprenderá a codificar la opción "Ir a página" de la barra de herramientas de CrystalReportViewer.

Esta barra de herramientas contiene botones de exploración de páginas y un cuadro de texto para seleccionar las páginas del informe. Puede utilizar los siguientes métodos de la clase CrystalReportViewer con el fin de escribir código manualmente para las selecciones de página:

• ShowFirstPage()• ShowLastPage()• ShowNextPage()• ShowNthPage(int PageNumber)• ShowPreviousPage()

Cuando se llama a uno de estos métodos, se muestra la página seleccionada para el informe actual.

Page 74: Tutoriales y Codigo de Ejemplo Crystal Reports

Para agregar los controles TextBox y Button de la opción "Ir a página"

1. Abra el formulario Web Forms o Windows Forms en la vista Diseño.2. En el Cuadro de herramientas, arrastre un control TextBox a la cuarta fila y a la columna uno

de la tabla.3. Seleccione el control TextBox y, a continuación, desde la ventana Propiedades, siga estos

pasos: • Establezca el valor de ID (o Nombre) en "pageNumber".• Establezca el valor de la propiedad Text para que esté vacía.

4. En el Cuadro de herramientas, arrastre un control Button a la cuarta fila y la columna dos de la tabla.

5. Seleccione el control Button y, a continuación, desde la ventana Propiedades, siga estos pasos:

• Establezca el valor de ID (o Nombre) en "goToPage".• Establezca el valor de Text en "Ir a página".

Para codificar el controlador de eventos Click() del control Button

1. Haga doble clic en el control Button de Ir a página.

Aparece la clase de código subyacente del informe y muestra que se ha generado automáticamente un controlador de eventos goToPage_Click().

2. Convierta el texto escrito en el control TextBox en un número entero y, a continuación, pase el valor al método ShowNthPage() del control CrystalReportViewer.

Nota No ha validado que se especificó un número entero en el control TextBox. Para una aplicación de producción, debería agregar un control de validación configurado respecto al control TextBox.

[Visual Basic]

myCrystalReportViewer.ShowNthPage(Convert.ToInt32(pageNumber.Text))

[C#]

crystalReportViewer.ShowNthPage(Convert.ToInt32(pageNumber.Text));

Para probar el control del botón goToPage

1. En el menú Crear, seleccione Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

Se muestran el informe Chart y todos los controles agregados.

4. Especifique "3" en el control TextBox de pageNumber y, a continuación, haga clic en Ir a página.

Se vuelve a cargar la página para mostrar la página 3 del informe.

5. Vuelva a Visual Studio 2005 y haga clic en Detener para salir del modo de depuración.

Continúe con Modificar el factor de zoom.

Page 75: Tutoriales y Codigo de Ejemplo Crystal Reports

Modificar el factor de zoom

De forma predeterminada, la barra de herramientas de CrystalReportViewer le permite seleccionar un factor de zoom comprendido entre el 25% y el 400% mediante incrementos fijos de 25%, 50% o 100%. En esta sección, va a agregar código para permitir cualquier factor de zoom que desee.

Necesita un control TextBox en el que escribir el factor de zoom deseado y un control Button para volver a cargar la página.

Para agregar los controles TextBox y Button para la opción Zoom

1. Abra el formulario Web Forms o Windows Forms en la vista Diseño.2. En el Cuadro de herramientas, arrastre un control TextBox a la cuarta fila y a la columna tres

de la tabla.3. Seleccione el control TextBox y, a continuación, desde la ventana Propiedades, siga estos

pasos: • Establezca el valor de ID (o Nombre) en "zoomFactor".• Establezca el valor de la propiedad Text para que esté vacía.

4. En el Cuadro de herramientas, arrastre un control Button a la cuarta fila y la columna cuatro de la tabla.

5. Seleccione el control Button y, a continuación, desde la ventana Propiedades, siga estos pasos:

• Establezca el valor de ID (o Nombre) en "updateZoomFactor".• Establezca el valor de Text en "% de zoom".

Para codificar el controlador de eventos Click() del control Button

1. Haga doble clic en el control Button de updateZoomFactor.

Aparece la clase de código subyacente del informe y muestra que se ha generado automáticamente un controlador de eventos updateZoomFactor_Click().

2. Convierta el texto escrito en el control TextBox en un número entero y, a continuación, pase el valor al método Zoom() del control CrystalReportViewer.

Nota No ha validado que se especificó un número entero en el control TextBox. Para una aplicación de producción, debería agregar un control de validación configurado respecto al control TextBox.

[Visual Basic]

myCrystalReportViewer.Zoom(Convert.ToInt32(zoomFactor.Text))

[C#]

crystalReportViewer.Zoom(Convert.ToInt32(zoomFactor.Text));

Para probar el control updateZoomFactor

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

Se muestran el informe Chart y todos los controles agregados.

Page 76: Tutoriales y Codigo de Ejemplo Crystal Reports

4. Especifique "38" en el control TextBox de zoomFactor y, a continuación, haga clic en Zoom.

Se vuelve a cargar la página para mostrar la página actual al 38% de su tamaño original.

5. Vuelva a Visual Studio 2005 y haga clic en Detener para salir del modo de depuración.

Continúe con Buscar en el informe.

Buscar en el informe

En esta sección, aprenderá a buscar texto en un informe de Crystal que enlace con el control CrystalReportViewer.

Necesita un control TextBox para escribir la cadena de búsqueda deseada, un control Button para buscar en el informe y un control Label para notificar el éxito o el error de la búsqueda.

Para agregar los controles TextBox, Button y Label para la opción Search

1. Abra el formulario Web Forms o Windows Forms en la vista Diseño.2. En el Cuadro de herramientas, arrastre un control TextBox a la quinta fila y a la columna uno

de la tabla.3. Seleccione el control TextBox y, a continuación, desde la ventana Propiedades, siga estos

pasos: • Establezca el valor de ID (o Nombre) en "searchText".• Establezca el valor de la propiedad Text para que esté vacía.

4. En el Cuadro de herramientas, arrastre un control Button a la quinta fila y la columna dos de la tabla.

5. Seleccione el control Button y, a continuación, desde la ventana Propiedades, siga estos pasos:

• Establezca el valor de ID (o Nombre) en "search".• Establezca el valor de Text en "Buscar texto".

6. En el Cuadro de herramientas, arrastre un control Label a la quinta fila y a la columna tres de la tabla.

• Establezca el valor de ID (o Nombre) en "message".• Establezca el valor de Text para que esté vacío.• Establezca el valor de ForeColor en Red.

7. Cree la clase MessageConstants para almacenar respuestas estándar como constantes de cadena para la búsqueda.

Nota Para obtener instrucciones sobre cómo crear esta clase, vea Agregar una clase para mensajes de error.

Después, debe llamar al método SearchForText() en el control Button de búsqueda.

Nota El método SearchForText() no tiene el mismo comportamiento si se trata de un sitio Web o un proyecto para Windows.En los sitios Web, el método SearchForText() devuelve True cuando no se obtienen resultados. En los proyectos de Windows, el método SearchForText() devuelve True cuando se obtienen resultados. A su vez, en los sitios Web, la búsqueda encuentra sólo la primera aparición de la cadena; mientras que, en los proyectos para Windows, la búsqueda continúa a partir del último resultado de la búsqueda.

Como el método no tiene el mismo comportamiento si se trata de un sitio Web o un proyecto para Windows, realice el siguiente procedimiento con pasos correspondiente a un sitio Web o un proyecto para Windows.

Page 77: Tutoriales y Codigo de Ejemplo Crystal Reports

Para codificar el controlador de eventos search_Click() para un sitio Web

1. Haga doble clic en el control Button de search.

Aparece la clase de código subyacente del informe y muestra que se ha generado automáticamente un controlador de eventos search_Click().

2. Recupere el texto escrito en el control TextBox y, a continuación, pase el valor al método SearchForText() del control CrystalReportViewer. Asigne la llamada del método a una variable booleana.

Nota Para que la clase SearchDirection sea accesible, deberá incluir un enunciado "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos.)

[Visual Basic]

Dim mySearchResult As Boolean = myCrystalReportViewer.SearchForText(searchText.Text, SearchDirection.Forward)

[C#]

bool searchResult = crystalReportViewer.SearchForText(searchText.Text, SearchDirection.Forward);

3. Cree un bloque condicional que compruebe si la búsqueda tiene éxito.

[Visual Basic]

If Not mySearchResult Then

Else

End If

[C#]

if(!searchResult){}else{}

4. En el bloque If, asigne la constante MessageConstants.SUCCESS a la propiedad Text del control Label del mensaje.

[Visual Basic]

message.Text = MessageConstants.SUCCESS

[C#]

message.Text = MessageConstants.SUCCESS;

Page 78: Tutoriales y Codigo de Ejemplo Crystal Reports

5. En el bloque Else, asigne la constante MessageConstants.FAILURE a la propiedad Text del control Label del mensaje.

[Visual Basic]

message.Text = MessageConstants.FAILURE

[C#]

message.Text = MessageConstants.FAILURE;

Sáltese el siguiente procedimiento de un proyecto para Windows y vaya al próximo procedimiento de prueba.

Para codificar el controlador de eventos search_Click() para un proyecto para Windows

1. Haga doble clic en el control Button de search.

Aparece la clase de código subyacente del informe y muestra que se ha generado automáticamente un controlador de eventos search_Click().

2. Recupere el texto escrito en el control TextBox y, a continuación, pase el valor al método SearchForText() del control CrystalReportViewer. Asigne la llamada del método a una variable booleana.

[Visual Basic]

Dim mySearchResult As Boolean = myCrystalReportViewer.SearchForText(searchText.Text)

[C#]

bool searchResult = crystalReportViewer.SearchForText(searchText.Text);

3. Cree un bloque condicional que compruebe si la búsqueda tiene éxito.

[Visual Basic]

If mySearchResult Then

Else

End If

[C#]

if(searchResult){}else{}

4. En el bloque If, asigne la constante MessageConstants.SUCCESS a la propiedad Text del control Label del mensaje.

Page 79: Tutoriales y Codigo de Ejemplo Crystal Reports

[Visual Basic]

message.Text = MessageConstants.SUCCESS

[C#]

message.Text = MessageConstants.SUCCESS;

5. En el bloque Else, asigne la constante MessageConstants.FAILURE a la propiedad Text del control Label del mensaje.

[Visual Basic]

message.Text = MessageConstants.FAILURE

[C#]

message.Text = MessageConstants.FAILURE;

Para probar el control Button de search

1. En el menú Crear, haga clic en Generar solución.2. Si existen errores de generación, continúe y corríjalos ahora.3. En el menú Depurar, haga clic en Iniciar.

Se muestran el informe Chart y todos los controles agregados.

4. Especifique "China" en el control TextBox de searchText y, a continuación, haga clic en Buscar.

Se vuelve a cargar la página para resaltar el resultado de la búsqueda y para mostrar un mensaje de éxito.

5. Especifique "hola" en el control TextBox de searchText y, a continuación, haga clic en Buscar.

Se vuelve a cargar la página para mostrar un mensaje de error.

6. Vuelva a Visual Studio 2005 y haga clic en Detener para salir del modo de depuración.

Las opciones de personalización restantes sólo están disponibles para la versión Web del control CrystalReportViewer.

• Por lo tanto, si está desarrollando un sitio Web, continúe con Agregar un borde al informe de un sitio Web.

• En caso contrario, si está desarrollando un proyecto para Windows, continúe con Conclusión.

Conclusión

Ha agregado correctamente código para personalizar el informe que enlaza con el control CrystalReportViewer. Asimismo, ha aprendido a seleccionar una página, cambiar el factor de zoom, buscar texto, elegir un modo de impresión y personalizar el borde.

Page 80: Tutoriales y Codigo de Ejemplo Crystal Reports