Share via


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.

Como se ha mostrado en el tutorial Tutorial: Conservar el modelo de objetos ReportDocument con Session, los cambios efectuados en el modelo de objetos ReportDocument se pierden cuando se vuelve a cargar la página Web, cada vez que los usuarios hagan clic en los botones de la barra de herramientas de CrystalReportViewer (como Página siguiente y Zoom).

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

  1. En el menú Generar, 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.
  1. 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).

  2. 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 en el modelo de objetos ReportDocument cuando se vuelvan a cargar las páginas Web.

Para comenzar, va a agregar código de persistencia al método ConfigureCrystalReports() agregando un bloque al bloque condicional 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 Paris y Tokyo al ArrayList en la parte inferior del bloque condicional Not IsPostBack.

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

    If Not IsPostBack Then
    defaultParameterValuesList.DataSource =
    GetDefaultValuesFromParameterField(customersByCityReport)
    defaultParameterValuesList.DataBind()
    myArrayList.Add("Paris")
    myArrayList.Add("Tokyo")
    End If
    
    if (!IsPostBack)
    {
    defaultParameterValuesList.DataSource =
    GetDefaultValuesFromParameterField(customersByCityReport);
    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.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.</p></td>
</tr>
</tbody>
</table>

``` vb
Session("myArrayList") = myArrayList
```

``` csharp
Session["arrayList"] = arrayList;
```
  1. Agregue una condición Else al bloque condicional Not IsPostBack.

  2. En el bloque Else, obtenga la instancia de ArrayList de Session y proyéctela en un objeto ArrayList.

    myArrayList = Ctype(Session("myArrayList"), ArrayList)
    
    arrayList = (ArrayList)Session["arrayList"];
    

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

Estas modificaciones del método ConfigureCrystalReports() garantizan que la instancia actual de ArrayList siempre está disponible para pasarla 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.
  • Reemplazar 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 dos ú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 la llamada al método SetCurrentValuesForParameterField(). La segunda línea de código que se va a eliminar es el código que enlaza la instancia de customersByCityReport de la propiedad ReportSource del control CrystalReportViewer.

    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.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.</p></td>
</tr>
</tbody>
</table>

``` vb
Session("myArrayList") = myArrayList
```

``` csharp
Session["arrayList"] = arrayList;
```
  1. Llamar al método ConfigureCrystalReports().

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

    ConfigureCrystalReports()
    
    ConfigureCrystalReports();
    

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

Nota

Un enfoque alternativo a la conservación es conservar la instancia de ReportDocument. Para obtener información sobre cómo conservar la instancia de ReportDocument en Session, vea el tutorial Tutorial: Conservar el modelo de objetos ReportDocument con Session.

Para probar si está relleno el control ListBox defaultParameterValuesList

  1. En el menú Generar, 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.
  1. En la barra de herramientas CrystalReportViewer, haga clic en Página siguiente.

  2. Ahora se conserva la lista de las ciudades seleccionadas. Se muestra la página 2 del informe.

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