of 80 /80
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#:

Tutoriales y Codigo de Ejemplo Crystal Reports

Embed Size (px)

Text of Tutoriales y Codigo de Ejemplo Crystal Reports

  • Tutoriales y cdigo de ejemplo Cristal ReportsEsta seccin presenta una gran seleccin de tutoriales que permite trabajar con Crystal Reports para Visual Studio 2005. Cada tutorial le gua paso a paso en todo el proceso de creacin de proyectos que proporciona soluciones para una serie de casos de elaboracin de informes.

    Se recomienda realizar varios de los tutoriales para familiarizarse con los mtodos prcticos de trabajo en de trabajo en Crystal Reports para Visual Studio 2005.

    Cada tutorial va acompaado de proyectos de cdigo de ejemplo que muestran la versin finalizada del proyecto, escrita en C# y Visual Basic. La mayora de estos proyectos se facilitan como sitios Web y proyectos para Windows, excepto los diseados especficamente para utilizarse slo en la Web o slo en Windows.

    Haga clic en el vnculo adecuado para pasar a esa seccin:

    Cdigo de ejemplo Tutoriales del modelo de objeto CrystalReportViewer Tutoriales del modelo de objetos ReportDocument Tutoriales de cdigo reducido en Visual Studio 2005 Tutoriales de conectividad de datos Otros tutoriales

    Cdigo de ejemploLos cdigos de ejemplo son proyectos finalizados basados en las instrucciones facilitadas en los tutoriales. Para reproducir el cdigo de ejemplo, deber seguir los procedimientos de los tutoriales.

    Cada tutorial va acompaado de proyectos de cdigo de ejemplo de C# y Visual Basic que muestran la versin finalizada del proyecto. La mayora de estos proyectos se facilitan como sitios Web y proyectos para Windows, excepto los diseados especficamente para utilizarse slo en la Web o slo en Windows.

    En Crystal Reports para Visual Studio 2005, el cdigo de ejemplo se instala cuando se ejecuta el archivo de instalacin TutorialsSampleCodeProjects.msi. Para ubicar el archivo de instalacin, vea Directorio de cdigo de ejemplo de los tutoriales.

    Modelo de objetos CrystalReportViewer

    Nombre del tutorial Nombre de la carpeta del cdigo de ejemploConectar 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 parmetros discretos Sitio Web en C#: CS_Web_CRVObjMod_Parameters

    Proyecto para Windows en C#:

  • 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 parmetros 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 frmulas de seleccin 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 cdigo de ejemploAlmacenar el modelo de objetos ReportDocument Sitio Web en C#: CS_Web_RDObjMod_Session

  • utilizando SessionSitio Web en Visual Basic: VB_Web_RDObjMod_Session

    Conectar con una base de datos segura de SQL Server utilizando Autenticacin 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 parmetros 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

  • Leer y configurar parmetros 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 impresin 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 frmulas de seleccin 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

    Presentacin de elementos de informes con el control CrystalReportViewer

    Sitio Web en C#: CS_Web_RDObjMod_ReportParts

    Sitio Web en Visual Basic:

  • VB_Web_RDObjMod_ReportParts

    Tutoriales de cdigo reducido en Visual Studio 2005

    Nombre del tutorial Archivo de cdigo de ejemploConfiguracin de sitios Web de cdigo reducido con Crystal Reports mediante tareas inteligentes

    Sitio Web en C#: CS_Web_ReducedCode_WebSiteSetup

    Sitio Web en Visual Basic: VB_Web_ReducedCode_WebSiteSetup

    Configuracin de proyectos de Windows de cdigo 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

    Conexin de base de datos segura de cdigo reducido en un sitio Web

    Sitio Web en C#: CS_Web_ReducedCode_DBLogon

    Sitio Web en Visual Basic: VB_Web_ReducedCode_DBLogon

    Configurar los parmetros de cdigo 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 cdigo 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 cdigo reducido a otros controles en una aplicacin Windows

    Aplicacin Windows en C#: CS_Win_ReducedCode_ReportData

    Aplicacin para Windows en Visual Basic: VB_Win_ReducedCode_ReportData

    Conectividad de datos

    Nombre del tutorial Nombre de la carpeta del cdigo de ejemploCrear 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

  • Proyecto para Windows en Visual Basic: VB_Win_Data_DataSets

    Conectar a mtodos 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 cdigo de ejemploConfigurar la compatibilidad con clientes multilinges

    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

  • Los tutoriales de esta seccin utilizan los mtodos 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 vnculo adecuado para pasar a esa seccin:

    Conectar con una base de datos segura de SQL Server Leer y configurar parmetros discretos Leer y configurar parmetros de rango para un subinforme Filtrar datos con frmulas de seleccin Personalizar el control CrystalReportViewer

    Tutorial: Conectar con una base de datos segura de SQL ServerEn este tutorial, aprender a agregar cdigo de conexin para mostrar un informe que contiene informacin de una base de datos segura de SQL Server.

    Haga clic en el vnculo adecuado para pasar a esa seccin:

    Introduccin Crear un informe conectado a una base de datos segura de SQL Server Enlazar el informe sin cdigo de conexin Agregar el cdigo de conexin del informe Agregar la posibilidad de cambiar la ubicacin de la base de datos en tiempo de ejecucin Conclusin

    IntroduccinCuando 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 orgenes 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 ejecucin.

    Obtendr la instancia de TableLogOnInfos de la propiedad LogOnInfo del control CrystalReportViewer. A continuacin, asignar la instancia de ConnectionInfo a cada objeto TableLogOnInfo de la instancia de TableLogOnInfos.

    El cdigo de conexin de este tutorial tambin funciona para los subinformes insertados en el informe principal. Para el modelo de objetos ReportDocument, debe modificar el cdigo 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 ms informacin sobre el modelo de objetos que se debe utilizar, vea Cul es el modelo de objetos que se debe utilizar?.

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

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

    Para comenzar, cree un informe que obtenga su informacin 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 parmetros como requisito previo.

    Requisitos previos de configuracin de la base de datos

    1. Configuracin de SQL Server: Si tiene instalado SQL Server (o la versin OEM, MSDE), debe configurarse de modo que

    requiera la Autenticacin de SQL Server. Si no tiene instalado SQL Server (ni la versin OEM, MSDE), debe instalar MSDE con la

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

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

    Para instalar MSDE con la autenticacin de SQL Server, o la base de datos Northwind, vaya a las siguientes secciones de Configuracin del sistema de esta documentacin:

    Instalacin de MSDE con autenticacin de Windows o SQL Server Instalacin 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 informacin 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 slo funciona con un proyecto creado a partir de la Configuracin de proyectos. La Configuracin de proyectos contiene referencias especficas a espacios de nombres y configuracin de cdigos necesarios para este procedimiento, y ste no se podr completar sin dicha configuracin. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuracin de proyectos.

    1. En Explorador de soluciones, haga clic con el botn derecho en el nombre de proyecto en negrita, elija Agregar y, a continuacin, haga clic en Agregar nuevo elemento.

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

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

    Nota Si an no se ha registrado, se le puede pedir que se registre. Para saber cmo registrarse, vea Registro y cdigo de clave de Crystal Reports.

    4. En el panel Crear un nuevo documento de Crystal Report del cuadro de dilogo Galera de Crystal Report, seleccione Usar asistente de informes.

    5. En el panel Elegir un Asistente, seleccione Estndar. Haga clic en Aceptar.

    Aparecer la ventana Asistente para la creacin de informes estndar.

    6. En el panel Orgenes de datos disponibles, expanda la carpeta Crear nueva conexin.7. En la subcarpeta que se abre, expanda la carpeta OLE DB (ADO).

  • Aparecer la ventana OLE DB (ADO).

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

    9. Especifique los valores del servidor de base de datos, el id. de usuario y la contrasea en los campos Servidor, Id. de usuario y Contrasea.

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

    Deje desactivada la casilla de verificacin Seguridad integrada porque est usando la autenticacin de SQL Server en lugar de la autenticacin 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 smbolo > para mover la tabla al panel Tablas seleccionadas y, a continuacin,

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

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

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

    clic en el smbolo > para mover el campo al panel Agrupar por y, a continuacin, 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.

    Contine con Enlazar el informe sin cdigo de conexin.

    Enlazar el informe sin cdigo de conexinEn Configuracin 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 seccin enlazar la ruta de directorio de archivos del informe NorthwindCustomers al control CrystalReportViewer. A continuacin, probar si el informe se muestra correctamente cuando no se ha establecido el cdigo de conexin.

    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 Cdigo.3. Busque el mtodo ConfigureCrystalReports(), que ha creado en Configuracin de proyectos.4. Declare una variable de cadena, llmela reportPath y asgnele una ruta en tiempo de ejecucin 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 parmetro de cadena en el mtodo Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco duro en tiempo de ejecucin.

    [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 compilacin 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 an no se ha escrito el cdigo para conectarse con la base de datos.

    Para probar la carga del informe NorthwindCustomers

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos 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 continuacin, copie el informe en dicho subdirectorio.

    Nota Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecucin, 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 depuracin, aparecer un cuadro de dilogo en el que se indica que el archivo Web.config se debe modificar. Haga clic en el botn Aceptar para habilitar la depuracin.

    No se mostrar el informe NorthwindCustomers. Se mostrar despus de agregar el cdigo de conexin con la base de datos.

    Nota Los resultados pueden variar, segn la versin de Crystal Reports que utilice. Por ejemplo, si tiene instalado Crystal Reports 10 o una versin superior, se le pedir informacin de conexin a la base de datos para ese informe. Esta es una nueva funcin de Crystal Reports Developer y Crystal Reports para Visual Studio 2005. Si ejecuta una versin anterior de Crystal Reports, se produce una excepcin. En cualquier caso, debe seguir el siguiente procedimiento de pasos para crear una aplicacin totalmente funcional.

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

    Contine con Agregar el cdigo de conexin del informe.

    Agregar el cdigo de conexin del informeAhora estar preparado para agregar el cdigo de conexin del informe a la clase de cdigo subyacente. Va a empezar por crear un mtodo de ayuda privado, SetDBLogonForReport().

    Para crear y codificar el mtodo SetDBLogonForReport()

    1. Regrese a la clase de cdigo subyacente de este Web Forms o Windows Forms.2. En la parte inferior de la clase, cree un nuevo mtodo privado denominado

    SetDBLogonForReport() con ConnectionInfo pasado en la firma de mtodo.

    [Visual Basic]

    Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo)

    End Sub

    [C#]

    private void SetDBLogonForReport(ConnectionInfo connectionInfo){}

    3. Con este mtodo, se obtiene la instancia de TableLogOnInfos de la propiedad LogOnInfo de la clase CrystalReportViewer.

    Nota Para que la clase TableLogOnInfos sea accesible, incluya una instruccin "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de cdigo lateral del espacio de nombres CrystalDecisions.Shared. (Esta declaracin se ha agregado en Configuracin de proyectos.)

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

    [Visual Basic]

    Dim myTableLogOnInfos As TableLogOnInfos = myCrystalReportViewer.LogOnInfo

  • [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 parmetro ConnectionInfo.

    [Visual Basic]

    myTableLogOnInfo.ConnectionInfo = myConnectionInfo

    [C#]

    tableLogOnInfo.ConnectionInfo = connectionInfo;

    El procedimiento de este paso ha creado un mtodo para establecer la conexin de la base de datos. Sin embargo, debe modificar el mtodo ConfigureCrystalReports() para direccionar este mtodo, con el fin de que el informe sepa que tiene informacin sobre conexin de base de datos.

    La modificacin del mtodo ConfigureCrystalReports() requiere dos acciones:

    Configurar la instancia de ConnectionInfo. Llamar al mtodo SetDBLogonForReport().

    Para modificar el mtodo ConfigureCrystalReports() para direccionar el cdigo de conexin con la base de datos

    1. En el mtodo ConfigureCrystalReports(), agregue un par de saltos de lnea en el cdigo sobre la lnea que enlaza el informe al control CrystalReportViewer.

    2. En los saltos de lnea, 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.

  • Nota Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso limitado. Para obtener ms informacin, vase Seguridad: Crear una cuenta de acceso limitado a la base de datos.

    En el cdigo que escriba, reemplace la contrasea de ejemplo 1234 (que se muestra ms abajo) por su propia contrasea.

    [Visual Basic]

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

    [C#]

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

    4. Debajo del cdigo que enlaza el control CrystalReportViewer, llame al mtodo SetDBLogonForReport() y psele 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 cdigo para conectar con la base de datos.

    Para probar la carga del informe NorthwindCustomers

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos 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 depuracin.

    En la siguiente seccin, aprender a cambiar la ubicacin de la base de datos en tiempo de ejecucin.

    Contine con Agregar la posibilidad de cambiar la ubicacin de la base de datos en tiempo de ejecucin.

    Agregar la posibilidad de cambiar la ubicacin de la base de datos en tiempo de ejecucin

    En esta seccin, aprender a cambiar la ubicacin de la base de datos en tiempo de ejecucin. Slo requiere una pequea modificacin de la instancia de ConnectionInfo.

    Para cambiar la ubicacin de la base de datos en tiempo de ejecucin

  • 1. En el mtodo ConfigureCrystalReports(), cree un par de saltos de lnea en el cdigo detrs de la lnea que declara y crea una instancia de la clase ConnectionInfo.

    2. En los saltos de lnea, establezca la propiedad ServerName de la instancia de ConnectionInfo.

    Nota En el cdigo que escriba, reemplace el nombre del servidor de ejemplo DevDatabase (que aparece ms 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 ejecucin.

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

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos 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 depuracin.

    Contine con Conclusin.

    ConclusinHa configurado correctamente el cdigo para conectar con la base de datos de SQL Server y cambiar la ubicacin de la base de datos en tiempo de ejecucin.

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

    Tutorial: Leer y configurar parmetros discretosEn este tutorial aprender a crear un informe cuyos datos se puedan filtrar basndose en un parmetro discreto.

    Haga clic en el vnculo adecuado para pasar a esa seccin:

    Introduccin Crear un informe con parmetros

  • Enlazar el informe Configurar parmetros manualmente en el cdigo Crear un control ListBox que muestre los parmetros predeterminados Configurar parmetros a partir de las selecciones de ListBox Configurar la persistencia de parmetros Conclusin Informacin de cdigo de ejemplo

    IntroduccinUn parmetro discreto es un nico valor, a diferencia de un parmetro de rango, que hace referencia a un rango de valores. A los elementos de texto (como ciudades) se tiene acceso normalmente mediante parmetros discretos. A los elementos numricos(como sueldos de empleados) se suele acceder mediante parmetros de rango.

    En este tutorial establecer un valor de un parmetro 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 parmetro de ciudad. Dichos valores predeterminados del parmetro de ciudad se encapsulan dentro del informe.

    Para empezar, va a crear un informe de clientes con un parmetro 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 cdigo, generar un ArrayList que contiene nombres de ciudades (Pars, Tokio) y pasar dicha instancia de ArrayList a un mtodo de ayuda que establezca estos nombres como los valores actuales del parmetro de ciudad. A continuacin, enlazar el informe al control CrystalReportViewer y ver el informe que mostrar nicamente los clientes que vivan en Pars y Tokio.

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

    Crear un mtodo 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 botn para obtener los elementos seleccionados en el control ListBox y establecerlos para que sean los valores actuales del parmetro de ciudad. El informe se volver a mostrar incluyendo nicamente los clientes que vivan en las ciudades seleccionadas en el control ListBox.

    Este tutorial tambin se puede realizar con clases del modelo de objetos ReportDocument; vea Leer y configurar parmetros discretos mediante el modelo de objetos ReportDocument. Para obtener ms informacin sobre el modelo de objetos que se debe utilizar, vea Cul es el modelo de objetos que se debe utilizar?.

    Contine con Crear un informe con parmetros.

    Crear un informe con parmetrosPara empezar, cree un informe que obtenga su informacin 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 versin de Crystal Reports en el disco duro, vea Ubicacin de la base de datos de ejemplo Xtreme. Tiene que conectarse a la base de datos a travs de su entrada ODBC DSN. Para saber el nombre de esta entrada segn su versin de Crystal Reports, vea Entrada ODBC DSN para la base de datos de ejemplo Xtreme.

  • Para crear un informe con parmetros

    Nota Este procedimiento slo funciona con un proyecto creado a partir de la Configuracin de proyectos. La Configuracin de proyectos contiene referencias especficas a espacios de nombres y configuracin de cdigos necesarios para este procedimiento, y ste no se podr completar sin dicha configuracin. Por lo tanto, antes de que empiece con este procedimiento, primero debe seguir los pasos de Configuracin de proyectos.

    1. En Explorador de soluciones, haga clic con el botn derecho en el nombre de proyecto en negrita, elija Agregar y, a continuacin, haga clic en Agregar nuevo elemento.

    2. En el cuadro de dilogo 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 botn se denomina Abrir.

    Si no se ha registrado anteriormente, se le pedir que se registre. Para saber cmo registrarse, vea Registro y cdigo de clave de Crystal Reports.

    4. En el panel Crear un nuevo documento de Crystal Report del cuadro de dilogo Galera de Crystal Report, seleccione Usar asistente de informes.

    5. En el panel Elegir un Asistente, seleccione Estndar y, a continuacin, haga clic en Aceptar.6. En el panel Orgenes de datos disponibles de la ventana Asistente para la creacin de

    informes estndar, expanda la carpeta Crear nueva conexin.

    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 conexin; 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 versin de

    Crystal Reports, como se explica en Entrada DSN de ODBC para la base de datos de ejemplo Xtreme y, a continuacin, 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 continuacin, haga clic en Siguiente.

    10. Expanda la tabla Cliente, mantenga presionada CTRL y haga clic en Nombre del cliente, Ttulo del contacto, Direccin1, Apellido del contacto y Ciudad.

    11. Haga clic en el smbolo > para mover estos campos en el panel Campos para mostrar y, a continuacin, haga clic en el botn 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 continuacin, haga clic en el botn Finalizar.

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

    Ahora ya podr agregar un parmetro 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 parmetros. Para ver el Explorador de campos, en el men Crystal Reports, haga clic en Explorador de campos.

    Para agregar un parmetro Ciudad

  • 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 botn derecho en Campos de parmetro y seleccione Nuevo...

    3. En el cuadro de dilogo Crear campo de parmetro: 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 mltiples. 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 botn se denomina Establecer valores predeterminados.

    4. En el cuadro de dilogo 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 dilogo Establecer valores predeterminados.6. Haga clic en Aceptar para cerrar el cuadro de dilogo Crear campo de parmetro.

    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 programacin, a travs de la propiedad ParameterFieldInfo de la clase CrystalReportViewer.

    Ahora va a utilizar el Asistente de seleccin para establecer una frmula que conecte la columna de base de datos Ciudad con el campo de parmetro Ciudad creado recientemente.

    Para conectar el parmetro Ciudad a la columna de base de datos Ciudad

    1. En la barra de herramientas de Crystal Reports, haga clic en Asistente de seleccin.2. En el cuadro de dilogo Elegir campo, en Campos del informe, seleccione Cliente.Ciudad y,

    a continuacin, haga clic en Aceptar.3. En el cuadro de dilogo Asistente de seleccin, 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 opcin de la lista,

    {?City} y, a continuacin, haga clic en Aceptar.

    Nota Esta seleccin, {?City}, es el parmetro Ciudad creado anteriormente.

    5. Desde el men Archivo, seleccione Guardar todo.

    Ahora podr enlazar el informe al control CrystalReportViewer y establecer el parmetro de ciudad con dos valores iniciales, Pars y Tokio.

    Contine con Enlazar el informe.

    Enlazar el informe

  • Al seguir las instrucciones de Configuracin 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 seccin enlazar la ruta de directorio de archivos del informe CustomersByCity al control CrystalReportViewer. A continuacin, probar si el informe se muestra correctamente cuando no se han establecido valores actuales para su campo de parmetro.

    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 Cdigo para ver la clase de cdigo subyacente de este formulario

    Web Forms o Windows Forms.3. Busque el mtodo ConfigureCrystalReports(), que ha creado en Configuracin de proyectos.4. Declare una variable de cadena, llmela reportPath y asgnele una ruta en tiempo de ejecucin 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 parmetro de cadena en el mtodo Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco duro en tiempo de ejecucin.

    [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 compilacin 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;

  • Ahora estar listo para crear y ejecutar el proyecto. Est previsto que falle la carga del informe, porque an no se ha escrito el cdigo para establecer un valor para el campo de parmetro Ciudad.

    Para probar la carga del informe CustomersByCity

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos 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 continuacin, copie el informe en dicho subdirectorio.

    Nota Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecucin, 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 depuracin, aparecer un cuadro de dilogo en el que se indica que el archivo Web.config se debe modificar. Haga clic en el botn Aceptar para habilitar la depuracin.

    No se muestra el informe CustomersByCity. Se muestra despus de agregar un valor para el parmetro Ciudad ms adelante en este tutorial.

    Nota Los resultados pueden variar, segn la versin de Crystal Reports que utilice. En versiones ms recientes, ver un formulario que le pedir que indique valores de parmetro para dicho informe. En versiones anteriores, se produce una excepcin "Falta el valor actual del campo de parmetro". En cualquiera caso, debe agregar cdigo adicional para que la aplicacin sea completamente funcional.

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

    Contine con Configurar parmetros manualmente en el cdigo.

    Configurar parmetros manualmente en el cdigoAhora ya puede establecer dos valores ("Pars" y "Tokio") en el campo de parmetro Ciudad del informe CustomersByCity.

    Esto implica codificacin, que puede separar en los siguientes procesos:

    Necesita una constante PARAMETER_FIELD_NAME para contener el nombre de campo de parmetro "Ciudad".

    El cdigo para agregar los valores actuales al parmetro Ciudad se utiliza en distintas partes de este tutorial; por lo tanto, este cdigo se crear como un mtodo de ayuda independiente.

    En el mtodo ConfigureCrystalReports(), va a agregar los parmetros "Pars" y "Tokio" a una instancia de ArrayList y a pasar el informe y la instancia de ArrayList al mtodo de ayuda para que se procesen.

    Para crear una constante PARAMETER_FIELD_NAME

    1. Regrese a la clase de cdigo 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]

  • Private Const PARAMETER_FIELD_NAME As String = "City"

    [C#]

    private const string PARAMETER_FIELD_NAME = "City";

    Ahora ya puede crear el mtodo de ayuda que agregue los valores actuales al parmetro del informe.

    Para crear un mtodo de ayuda que agregue los valores actuales al parmetro del informe

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

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

    [Visual Basic]

    Imports System.Collections

    [C#]

    using System.Collections;

    Nota Esta declaracin se necesita para tener acceso a la clase ArrayList.

    3. En la parte inferior de la clase, cree un nuevo mtodo privado denominado SetCurrentValuesForParameterField() con dos variables en la firma del mtodo: 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 mtodo, 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 declaracin "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de cdigo subyacente del espacio de nombres CrystalDecisions.Shared. (Esta declaracin se ha agregado en Configuracin de proyectos.)

    [Visual Basic]

    Dim currentParameterValues As ParameterValues = New ParameterValues()

    [C#]

  • 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 mtodo, recupera valores de ArrayList. Posteriormente, va a escribir cdigo 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 psela 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 cdigo en el bucle foreach. Coloque el cdigo restante (a partir de los pasos siguientes) despus del bucle foreach.

  • 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 mtodo 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 mtodo 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 mtodo antes de enlazar el informe al control CrystalReportViewer, para que el informe sepa que tiene configuracin de parmetros.

    Para llamar al mtodo SetCurrentValuesForParameterField () antes de enlazar el informe al control CrystalReportViewer

    1. En el mtodo ConfigureCrystalReports(), declare y cree una instancia de ArrayList encima de la lnea 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 "Pars" 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 cdigo que enlaza el control CrystalReportViewer, obtenga la instancia de ParameterFields de la propiedad ParameterFieldInfo del control CrystalReportViewer.

  • [Visual Basic]

    Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo

    [C#]

    ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;

    4. Llame al mtodo SetCurrentValuesForParameterField() y psele 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 cdigo escrito para establecer los valores actuales en el campo de parmetro.

    Para probar la carga del informe CustomersByCity

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos ahora.3. En el men Depurar, haga clic en Iniciar.

    El informe CustomersByCity aparecer correctamente, mostrando la lista de los clientes de Pars y Tokio.

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

    En la siguiente seccin, aprender como obtener los valores predeterminados del campo de parmetro y establecer dichos valores en un control ListBox. stos se utilizan al final del tutorial para seleccionar nuevas ciudades dinmicamente y filtrar el informe basndose en las ciudades seleccionadas recientemente.

    Contine con Crear un control ListBox que muestre los parmetros predeterminados.

    Crear un control ListBox que muestre los parmetros predeterminados

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

    En esta seccin aprender a rellenar el control ListBox con los valores predeterminados del campo de parmetro.

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

  • Para hacerlo, deber agregar y configurar un control ListBox y, a continuacin, crear un mtodo 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 Diseador.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 continuacin, presione INTRO.

    El control CrystalReportViewer bajar una lnea.

    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 tamao 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 mtodo de ayuda que obtenga los valores predeterminados del campo de parmetro.

    Para crear un mtodo de ayuda que obtenga los valores predeterminados del campo de parmetro

    1. Abra el formulario Web Forms o Windows Forms.2. En el men Ver, haga clic en Cdigo.3. En la parte inferior de la clase, cree un nuevo mtodo privado denominado

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

    [Visual Basic]

    Private Function GetDefaultValuesFromParameterField(ByVal myParameterFields As ParameterFields) As ArrayList

    End Function

    [C#]

    private ArrayList GetDefaultValuesFromParameterField(ParameterFields parameterFields)

  • {}

    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 parmetros discretos (en oposicin a parmetros 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:

  • 8. Si la propiedad disponible es IsRange, en el bucle foreach, escriba este cdigo:

    [Visual Basic]

    If (Not myParameterValue.IsRange) Then

    End If

    [C#]

    if(!parameterValue.IsRange){}

    9. O, si la propiedad disponible es Kind (DiscreteOrRangeKind, una enumeracin con tres valores: DiscreteValue, RangeValue, DiscreteAndRangeValue), escriba este cdigo, 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. Adems, 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 mtodo, devuelva la instancia de ArrayList del mtodo.

  • [Visual Basic]

    Return myArrayList

    [C#]

    return arrayList;

    Ha obtenido los valores predeterminados del campo de parmetro y los ha devuelto del mtodo como un ArrayList. Ahora enlace este ArrayList al control ListBox defaultParameterValuesList.

    El cdigo vara ligeramente en funcin de si se utiliza un proyecto Web o un proyecto de Windows; por lo tanto, asegrese de que slo realiza el procedimiento para Web o para Windows.

    Para enlazar el ArrayList devuelto del mtodo al ListBox de un proyecto Web

    1. En el mtodo ConfigureCrystalReports(), agregue un par de saltos de lnea en el cdigo inmediatamente despus de la lnea de cdigo que obtiene la instancia de ParameterFields.

    En los saltos de lnea, ahora puede escribir cdigo adicional que establece el origen de datos para el control ListBox defaultParameterValuesList ListBox cuando la pgina se carga por primera vez.

    2. En los saltos de lnea, 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 cdigo que slo se debe ejecutar la primera vez que se carga la pgina. 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 pgina.

    3. En el bloque condicional Not IsPostBack, establezca la propiedad DataSource del ListBox defaultParameterValuesList al mtodo de ayuda GetDefaultValuesFromParameterField(), pasando la instancia de ParametersFields como un parmetro de mtodo.

    [Visual Basic]

    defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)

    [C#]

    defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields);

  • 4. An en el bloque condicional Not IsPostBack, llame al mtodo DataBind() del ListBox defaultParameterValuesList.

    [Visual Basic]

    defaultParameterValuesList.DataBind()

    [C#]

    defaultParameterValuesList.DataBind();

    Para enlazar el ArrayList devuelto del mtodo al ListBox de un proyecto de Windows

    1. En el mtodo ConfigureCrystalReports(), agregue un par de saltos de lnea en el cdigo inmediatamente despus de la lnea de cdigo que obtiene la instancia de ParameterFields.

    En los saltos de lnea, ahora puede escribir cdigo adicional que establece el origen de datos para el control ListBox defaultParameterValuesList ListBox cuando la pgina se carga por primera vez.

    2. En los saltos de lnea, establezca la propiedad DataSource del ListBox defaultParameterValuesList al mtodo de ayuda GetDefaultValuesFromParameterField(), pasando la instancia de ParametersFields como un parmetro de mtodo.

    [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 solucin.2. Si existen errores de generacin, contine y corrjalos 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 depuracin.

    En la siguiente seccin, agregar un botn para volver a mostrar el informe basado en las selecciones del control ListBox defaultParameterValuesList.

    Contine con Configurar parmetros a partir de las selecciones de ListBox.

  • Configurar parmetros a partir de las selecciones de ListBoxEn esta seccin, agregar un botn para volver a mostrar el informe basado en las selecciones del control ListBox defaultParameterValuesList. En el mtodo de evento de este botn, llamar al mismo mtodo que se llama al cargar la pgina por primera vez: SetCurrentValuesForParameterField(). Pero esta vez, en lugar de pasar valores arbitrarios (Pars y Tokio), pasar los valores seleccionados en el control ListBox defaultParameterValuesList.

    Para crear y configurar un botn 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 Diseador.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 mtodo de evento de clic de botn que busque los elementos seleccionados en el control ListBox y los pase al mtodo SetCurrentValuesForParameterField().

    El cdigo vara ligeramente para un proyecto Web o un proyecto de Windows; por lo tanto, realice slo el procedimiento para Web o para Windows.

    Para crear el mtodo de evento de clic del botn que vuelve a mostrar el informe en un proyecto Web

    1. Haga doble clic en el botn Volver a mostrar el informe.

    Pasa a la clase de cdigo subyacente en la que se ha generado automticamente un mtodo de evento redisplay_Click().

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

    [Visual Basic]

    Imports System.Web.UI.WebControls

    [C#]

    using System.Web.UI.WebControls;

    Nota Esta declaracin se necesita para tener acceso a la clase ListItem.

    3. En el mtodo de evento redisplay_Click() que se acaba de generar automticamente, declare y cree una instancia de ArrayList.

    [Visual Basic]

    Dim myArrayList As ArrayList = New ArrayList()

    [C#]

  • 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 ms 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 conexin.

    La ruta predeterminada para un proyecto de sitio Web:

    [Visual Basic]

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

  • [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 mtodo SetCurrentValuesForParameterField().

    [Visual Basic]

    SetCurrentValuesForParameterField(myParameterFields, myArrayList)

    [C#]

    SetCurrentValuesForParameterField(parameterFields, arrayList);

    Para crear el mtodo de evento de clic del botn 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 cdigo subyacente en la que se ha generado automticamente un mtodo de evento redisplay_Click().

    2. En el mtodo de evento redisplay_Click() que se acaba de generar automticamente, 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

  • [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 ms 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 conexin.

    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 mtodo SetCurrentValuesForParameterField().

    [Visual Basic]

    SetCurrentValuesForParameterField(myParameterFields, myArrayList)

    [C#]

  • SetCurrentValuesForParameterField(parameterFields, arrayList);

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

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

    Para probar si est relleno el control ListBox defaultParameterValuesList

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos 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 botn Volver a mostrar el informe.

    La pgina 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 depuracin.

    Contine con Configurar la persistencia de parmetros.

    Configurar la persistencia de parmetrosEn esta seccin configurar la persistencia (en un tutorial basado en Web) de las selecciones de campo de parmetro que se han realizado en el control ListBox.

    Para demostrar la falta de persistencia de las selecciones de parmetro

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos ahora.3. En el men Depurar, haga clic en Iniciar.4. En el control ListBox, presione la tecla Mays mientras hace clic para seleccionar todas las

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

    La pgina se vuelve a cargar y, a continuacin, muestra los registros de cliente de todos los clientes de todas las ciudades. Es un informe extenso que contiene muchas pginas.

    6. En la barra de herramientas CrystalReportViewer, haga clic en Pgina siguiente.

    No se conserva la lista de las ciudades seleccionadas. La pgina 2 del informe no se muestra. En su lugar, vuelve a aparecer la configuracin de parmetros de inicio (Pars y Tokio).

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

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

    Debe agregar cdigo de persistencia a la aplicacin para que se conserven los cambios efectuados cuando se vuelvan a cargar las pginas Web.

  • Para comenzar, va a agregar cdigo de conservacin al mtodo ConfigureCrystalReports() agregando un bloque Else al bloque condicional If Not IsPostBack. A continuacin, va a establecer valores nicos para la instancia de ArrayList por cada condicin del bloque condicional. Al iniciarse la pgina, va a establecer los valores predeterminados ("Pars" y "Tokio") en la instancia de ArrayList. Al volver a cargarse la pgina, va a recuperar la instancia de ArrayList que est almacenada en Session.

    Para agregar cdigo de persistencia al mtodo ConfigureCrystalReports()

    1. En el mtodo ConfigureCrystalReports(), corte y pegue las dos lneas de cdigo que agregan Pars 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 lnea final de cdigo 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 condicin Else al bloque condicional Not IsPostBack.4. En el bloque Else, obtenga la instancia de ArrayList de Session y proyctela en ArrayList.

    [Visual Basic]

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

    [C#]

  • 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 mtodo ConfigureCrystalReports() garantizan que siempre se pase la instancia actual de ArrayList al mtodo SetCurrentValuesForParameterField().

    En la siguiente seccin, realizar dos cambios en el cdigo del evento de clic de botn:

    Tomar el ArrayList que ha creado y asignarlo a Session. Reemplace las dos ltimas lneas de cdigo (que configuran y muestran el informe) con una

    llamada al mtodo ConfigureCrystalReports() para realizar esta funcin en un conjunto comn de cdigo.

    Para modificar el cdigo del mtodo de evento de clic de botn para que funcione con la persistencia de Session

    1. Elimine las tres ltimas lneas de cdigo del mtodo de evento de clic de botn. La primera lnea de cdigo que se eliminar es el cdigo que enlaza la ruta de directorio

    de archivos del informe a la propiedad ReportSource del control CrystalReportViewer. La segunda lnea de cdigo que se eliminar es el cdigo que obtiene la instancia de

    ParameterFields de la propiedad ParameterFieldInfo del control CrystalReportViewer. La tercera lnea de cdigo que se eliminar es la llamada al mtodo

    SetCurrentValuesForParameterField().

    En el siguiente paso agregar dos nuevas lneas de cdigo para reemplazar el cdigo eliminado.

    2. En el mtodo de evento de clic de botn, inmediatamente fura del bucle foreach, agregue una lnea de cdigo 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.

  • [Visual Basic]

    Session("myArrayList") = myArrayList

    [C#]

    Session["arrayList"] = arrayList;

    3. Llame al mtodo 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 parmetro se ha restablecido correctamente.

    Para probar si est relleno el control ListBox defaultParameterValuesList

    1. En el men Crear, seleccione Generar solucin.2. Si existen errores de generacin, contine y corrjalos ahora.3. En el men Depurar, haga clic en Iniciar.4. En el control ListBox, presione la tecla Mays mientras hace clic para seleccionar todas las

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

    La pgina 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 pginas.

    6. En la barra de herramientas CrystalReportViewer, haga clic en Pgina siguiente.7. Ahora se conserva la lista de las ciudades seleccionadas. Se muestra la pgina 2 del informe.8. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuracin.

    Contine con Conclusin.

    ConclusinHa creado correctamente un informe con un valor de parmetro discreto, ha creado mtodo de ayuda que acepta cualquier conjunto de valores en un formato comn (un ArrayList) y ha aplicado dichos valores a un informe basado en un nombre de campo de parmetro especfico (la constante PARAMETER_FIELD_NAME).

    Tambin ha aprendido a llenar el un control ListBox con los valores predeterminados de un campo de parmetro particular. Ha aprendido a obtener los valores seleccionados del ListBox y colocarlos en un ArrayList para volver a llamar al mtodo de ayuda original y cambiar la lista de valores de parmetro, as como la presentacin del informe.

  • Nota Ahora puede seguir trabajando con este tutorial y agregar un subinforme al informe y, a continuacin, configurar dicho subinforme con un parmetro de rango. Si lo desea, contine con el siguiente tutorial, que modifica el tutorial actual, Leer y configurar parmetros de rango con un subinforme.

    Tutorial: Leer y configurar parmetros de rango para un subinforme

    En este tutorial explorar una complicacin adicional: qu sucede si el informe contiene un subinforme que necesita parmetros distintos?

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

    Haga clic en el vnculo adecuado para pasar a esa seccin:

    Introduccin

  • Agregar un subinforme al informe original Agregar el cdigo de parmetro de subinforme Agregar controles TextBox para contener valores de parmetro de rango Modificar mtodos para llamar al subinforme Probar el parmetro de subinforme Conclusin Informacin de cdigo de ejemplo

    IntroduccinEn el tutorial anterior, Leer y configurar parmetros discretos, obtuvo informacin sobre cmo crear un informe con un parmetro discreto y cmo escribir cdigo que estableciera dicho parmetro en tiempo de ejecucin, tanto con valores de parmetro codificados como con valores de parmetros pasados desde un control ListBox o TextBox.

    En este tutorial, aprender a agregar parmetros de rango a un subinforme.

    Necesita realizar cuatro modificaciones al proyecto que ha creado en Leer y configurar parmetros 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 parmetro 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 ejecucin. Modificar el mtodo SetCurrentValuesForParameter() que ha creado en el tutorial anterior.

    Este mtodo crea una instancia de ParameterRangeValue que contiene los valores startDate y endDate values, y, a continuacin, pasa dicha instancia de ParameterRangeValue al parmetro de rango en el subinforme.

    Cuando termine este tutorial, podr filtrar los valores que se muestran en el informe en tiempo de ejecucin. El cdigo que agregue limita el nmero 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 tambin se puede realizar con clases del modelo de objetos ReportDocument; vea Leer y configurar parmetros con un subinforme mediante el modelo de objetos ReportDocument. Para obtener ms informacin sobre el uso del modelo de objetos, vea Cul es el modelo de objetos que se debe utilizar?.

    Contine con Agregar un subinforme al informe original.

    Agregar un subinforme al informe originalPara 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 parmetros discretos.2. En Explorador de soluciones, haga doble clic en el informe CustomersByCity para abrirlo.

  • 3. Haga clic con el botn derecho en la barra gris Detalles y seleccione Insertar seccin abajo.4. Haga clic con el botn derecho en la nueva seccin Detalles b que ha creado, seleccione

    Insertar y, a continuacin, haga clic en Subinforme.

    Aparece un cuadrado gris alrededor del cursor del mouse.

    5. Arrastre el rectngulo gris en la nueva seccin Detalles b y, a continuacin, haga clic para soltarlo.

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

    Nota El cuadro de dilogo Insertar un subinforme incluye otras opciones que permiten elegir un informe existente y subinformes a peticin. Para obtener ms informacin sobre estas funciones, vea Insertar un subinforme (cuadro de dilogo).

    7. En el campo Nombre del informe nuevo, escriba "PedidosClientes".8. Haga clic en Asistente de informes...9. En el panel Orgenes de datos disponibles de la ventana Asistente para la creacin de

    informes estndar, expanda la carpeta Crear nueva conexin.

    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 conexin; 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 versin de

    Crystal Reports, como se explica en Entrada DSN de ODBC para la base de datos de ejemplo Xtreme y, a continuacin, 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 smbolo > para mover la tabla Pedidos al panel Seleccionar tablas y, a continuacin, haga clic en Siguiente.

    13. En el panel Campos disponibles, seleccione ID del pedido, Fecha del pedido, Fecha de envo y Enviar va.

    14. Haga clic en el smbolo > para mover estos campos al panel Campos para mostrar y, a continuacin, haga clic en Finalizar.

    15. En el cuadro de dilogo Insertar un subinforme, seleccione la ficha Vnculo.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 continuacin, haga clic en el smbolo >.

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

    Estas selecciones de parmetros y de datos generan automticamente entre el informe principal y el subinforme.

    18. Haga clic en Aceptar.

    El nuevo subinforme, PedidosClientes, se muestra en la seccin Detalles b del informe principal.

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

  • Ahora est listo para verificar la configuracin del subinforme.

    Para verificar la configuracin del subinforme

    1. En la seccin Detalles, haga doble clic en el subinforme PedidosClientes para verlo.

    En la parte inferior de la vista del diseador, 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 parmetro.4. Verifique que el campo de parmetro Pm-Clientes.ID del cliente se ha generado

    automticamente al vincular el subinforme.5. En la barra de herramientas de Crystal Reports, haga clic en Asistente de seleccin.6. En el cuadro de dilogo Asistente de seleccin, verifique que est establecido el criterio

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

    7. Desde el men Archivo, seleccione Guardar todo.

    Ha agregado correctamente un subinforme PedidosClientes al informe CustomersByCity. En la seccin siguiente agregar un parmetro OrderDateRange al subinforme.

    Para agregar un parmetro OrderDateRange al subinforme

    1. En el Explorador de campos, haga clic con el botn derecho en Campos de parmetro y seleccione Nuevo...

    2. En el cuadro de dilogo Crear campo de parmetro: 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 seleccin, "Rango de valores".

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

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

    frmula:8. Escriba la siguiente frmula:

    {Orders.Order Date} in {?OrderDateRange}

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

    Ha agregado correctamente un parmetro OrderDateRange al subinforme y lo ha vinculado a la columna Pedidos.Fecha del pedido. En la seccin siguiente agregar cdigo para direccionar el parmetro OrderDateRange en el subinforme.

  • Contine con Agregar el cdigo de parmetro de subinforme.

    Agregar el cdigo de parmetro de subinformeAhora est listo para agregar el cdigo de parmetro para el subinforme a la clase de cdigo subyacente. Para empezar, cree un mtodo de ayuda privado, SetDateRangeForOrders().

    Para crear y codificar el mtodo SetDateRangeForOrders()

    1. Abra el formulario Web Forms o Windows Forms.2. En el men Ver, haga clic en Cdigo.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 mtodo privado denominado SetDateRangeForOrders()con tres parmetros: 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 mtodo, 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 cdigo subyacente del espacio de nombres CrystalDecisions.Shared. (Esta declaracin se ha agregado en Configuracin de proyectos.)

  • 6. Establezca la propiedad StartValue de la instancia de ParameterRangeValue en el parmetro de mtodo 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 genrico permite que el valor de rango que se pasa sea de muchos tipos, incluidos: texto, nmero, fecha, moneda u hora.

    7. Establezca la propiedad EndValue de la instancia de ParameterRangeValue en el parmetro de mtodo endDate.

    [Visual Basic]

    myParameterRangeValue.EndValue = endDate

    [C#]

    parameterRangeValue.EndValue = endDate;

    8. Establezca los lmites 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 parmetro del subinforme.

    9. Obtenga la instancia de ParameterField de la clase indizada ParameterFields basada dos valores indizados: el nombre de campo de parmetro 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];

  • 10. Llame al mtodo 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 parmetro OrderDateRange del subinforme PedidosClientes.

    Contine con Agregar controles TextBox para contener valores de parmetro de rango.

    Agregar controles TextBox para contener valores de parmetro de rango

    En esta seccin, agregar dos controles TextBox que proporcionan los valores de fecha inicial y final en tiempo de ejecucin al parmetro 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 botn 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 Diseador.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 lneas entre el control ListBox y el control

    Button.c. En la primera lnea creada debajo del control ListBox, escriba "Fecha inicial de pedidos".d. En la segunda lnea 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 herram