Compartir a través de


Agregar código de Session

En esta sección, aprenderá a usar Session para conservar el cambio de la dirección de ordenamiento del informe. Al método ConfigureCrystalReports() creado al configurar el proyecto (vea Configuración de proyectos) le agregará código que busque Session y cargue de nuevo inmediatamente la instancia del informe en Session cuando un usuario ajuste la dirección de ordenamiento.

Para agregar código de búsqueda de Session al método ConfigureCrystalReports()

  1. En el método ConfigureCrystalReports(), delante del código existente, cree un bloque condicional if/else que compruebe si existe un objeto Session denominado hierarchicalGroupingReport.

    Puede usar un nombre de identificador que elija para este objeto Session. Use un identificador exclusivo, como el nombre de la copia del informe.

    If (Session("hierarchicalGroupingReport") Is Nothing) Then
    
    Else
    
    End If
    
    if(Session["hierarchicalGroupingReport"] == null)
    {
    }
    else
    {
    }
    
  2. Si utiliza un informe incrustado, mueva la línea de código que declara y crea una copia del informe desde su ubicación actual hasta el bloque If.

    If (Session("hierarchicalGroupingReport") Is Nothing) Then
    hierarchicalGroupingReport = New Hierarchical_Grouping()
    Else
    
    End If
    
    if (Session["hierarchicalGroupingReport"] == null)
    {
    hierarchicalGroupingReport = new Hierarchical_Grouping();
    }
    else
    {
    }
    
  3. Si utiliza un informe no incrustado, mueva las dos líneas del código que declaran y crean una copia del informe y que lo cargan desde la ruta de directorio hasta su ubicación actual en el bloque If.

    Nota

    En este ejemplo se supone que utiliza Crystal Reports para Visual Studio 2008. Si utiliza otra versión, vea Directorio de informes de muestra para determinar la ruta correcta a los informes de muestra.

    If (Session("hierarchicalGroupingReport") Is Nothing) Then
    hierarchicalGroupingReport = New ReportDocument()
    hierarchicalGroupingReport.Load("C:\Archivos de programa\Microsoft Visual Studio 9.0\Crystal Reports\Samples\Es\Reports\Feature Examples\Hierarchical Grouping.rpt")
    Else
    
    End If
    
    if(Session["hierarchicalGroupingReport"] == null)
    {
    hierarchicalGroupingReport = new ReportDocument();
    hierarchicalGroupingReport.Load("C:\Archivos de programa\Microsoft Visual Studio 9.0\Crystal Reports\Samples\Es\Reports\Feature Examples\Hierarchical Grouping.rpt");
    }
    else
    {
    }
    
  4. En el bloque If, asigne el informe a Session, utilizando el nombre de variable de informe como la cadena del identificador Session.

``` vb
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
```

``` csharp
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
```

Esto completa el bloque If. El bloque If se ejecuta si el informe no existe en Session. El bloque Else se ejecuta si se encuentra el informe en Session; por lo tanto, la finalidad del bloque Else es obtener el informe de Session en una instancia de informe.
  1. En el bloque Else, asigne el informe almacenado en Session a la copia del informe.
``` vb
hierarchicalGroupingReport = CType(Session("hierarchicalGroupingReport"), ReportDocument)
```

``` csharp
hierarchicalGroupingReport = (ReportDocument)Session["hierarchicalGroupingReport"];
```

<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>Como Session sólo devuelve objetos genéricos, debe proyectar el informe en un tipo de informe. Tanto si utiliza informes incrustados como informes no incrustados, proyecte el objeto recuperado al tipo ReportDocument.</p></td>
</tr>
</tbody>
</table>

Fuera y debajo del bloque condicional, el código restante enlaza la instancia del informe a la propiedad ReportSource del control CrystalReportViewer.

Como recordará de Configuración de proyectos (vea Configuración de proyectos), se llama al método ConfigureCrystalReports() cada vez que se vuelve a cargar una página. Por lo tanto, la modificación de este método garantiza que siempre se recupera y vuelve a cargar el informe más actual, ya sea nuevo o almacenado en Session. Sin embargo, aún no se ha escrito nada para actualizar realmente la instancia del informe. En la siguiente sección, actualizará la instancia del informe en Session cada vez que se modifique la dirección de ordenamiento.

Para actualizar la instancia del informe en Session para el método de evento sortOrderDescending_Click

  1. En el método de evento sortOrderDescending_Click(), elimine la última línea de código que enlaza el control CrystalReportViewer al informe.
Esto le debe dejar las tres líneas de código que cambian la dirección de ordenamiento.
  1. Bajo las tres líneas de código que cambian la dirección de ordenamiento, asigne la instancia de hierarchicalGroupingReport (que se ha actualizado con una nueva dirección de ordenamiento) a Session mediante el mismo identificador usado en el método ConfigureCrystalReports().
<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>Para simplificar el proceso, copie y pegue esta línea de código del método ConfigureCrystalReports().</p></td>
</tr>
</tbody>
</table>

``` vb
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
```

``` csharp
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
```
  1. Finalmente, agregue una llamada al método ConfigureCrystalReports(), que obtiene la última instancia de hierarchicalGroupingReport de Session (la misma que actualizó hace un momento) y enlácela al control CrystalReportViewer.
``` vb
ConfigureCrystalReports()
```

``` csharp
ConfigureCrystalReports();
```

Ahora puede repetir los mismos pasos para el segundo método de evento.

Para actualizar la instancia del informe en Session para el método de evento sortOrderAscending_Click

  1. En el método de evento sortOrderAscending_Click(), elimine la última línea de código que enlaza el control CrystalReportViewer al informe.

    Esto le debe dejar las tres líneas de código que cambian la dirección de ordenamiento.

  2. Bajo las tres líneas de código que cambian la dirección de ordenamiento, asigne la instancia de hierarchicalGroupingReport (que se ha actualizado con una nueva dirección de ordenamiento) a Session mediante el mismo identificador usado en el método ConfigureCrystalReports().

Para simplificar el proceso, copie y pegue esta línea de código del método ConfigureCrystalReports().

``` vb
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
```

``` csharp
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
```
  1. Finalmente, agregue una llamada al método ConfigureCrystalReports(), que obtiene la última instancia de hierarchicalGroupingReport de Session (la misma que actualizó hace un momento) y enlácela al control CrystalReportViewer.

    ConfigureCrystalReports()
    
    ConfigureCrystalReports();
    

Ahora ya estará preparado para comprobar si los cambios de orden se han conservado correctamente.