Condividi tramite


Configurazione della persistenza dei parametri

In questa sezione viene descritto come configurare, in un'esercitazione basata sul Web, la persistenza per le selezioni del campo parametro effettuate nel controllo ListBox.

Come dimostrato nell'esercitazione Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session, le modifiche effettuate nel modello a oggetti ReportDocument vanno perse quando la pagina Web viene ricaricata, ovvero ogni volta che gli utenti fanno clic sui pulsanti della barra degli strumenti di CrystalReportViewer (come Pagina seguente e Zoom).

Per dimostrare la mancanza di persistenza nelle selezioni del parametro

  1. Dal menu Genera, scegliere Genera soluzione.

  2. Se si verificano errori di generazione, correggerli.

  3. Dal menu Debug, scegliere Avvia.

  4. Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco.

  5. Fare clic su Rivisualizza report.

La pagina viene ricaricata visualizzando i record di tutti i clienti di tutte le città. Si tratta di un report di grandi dimensioni contenente numerose pagine.
  1. Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente.

    L'elenco delle città selezionate non viene mantenuto e la pagina 2 del report non viene visualizzata. Vengono invece mostrate nuovamente le impostazioni iniziali del parametro (Paris e Tokyo).

  2. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.

Per rendere persistenti le modifiche apportate all'interno del modello a oggetti ReportDocument quando le pagine Web vengono ricaricate, è necessario aggiungere codice di persistenza all'applicazione.

Iniziare aggiungendo il codice di persistenza al metodo ConfigureCrystalReports(), quindi aggiungere un blocco Else al blocco condizionale Not IsPostBack. Proseguire impostando valori univoci per l'istanza ArrayList per una delle condizioni all'interno del blocco condizionale. All'avvio della pagina, impostare i valori predefiniti ("Paris" e "Tokyo") nell'istanza ArrayList. Ai successivi caricamenti della pagina, recuperare l'istanza ArrayList salvata in Session.

Per aggiungere codice di persistenza al metodo ConfigureCrystalReports()

  1. All'interno del metodo ConfigureCrystalReports(), tagliare e incollare le due righe di codice che aggiungono Paris e Tokyo all'ArrayList, alla fine del blocco condizionale Not IsPostBack.

    Al termine dell'operazione, il blocco condizionale dovrebbe presentarsi come segue:

    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. Aggiungere una riga di codice finale al blocco condizionale che assegni l'istanza ArrayList a Session.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\Aa983431.alert_note(it-it,VS.90).gif" alt="Note" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Per la persistenza Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa.</p></td>
</tr>
</tbody>
</table>

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

``` csharp
Session["arrayList"] = arrayList;
```
  1. Aggiungere una condizione Else al blocco condizionale Not IsPostBack.

  2. All'interno del blocco Else, recuperare l'istanza ArrayList da Session ed eseguirne il cast in ArrayList.

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

Al termine dell'operazione, il blocco condizionale dovrebbe presentarsi come segue:

Le modifiche apportate al metodo ConfigureCrystalReports()assicurano che l'istanza ArrayList corrente sia sempre disponibile per essere passata al metodo SetCurrentValuesForParameterField().

Nella sezione successiva vengono apportate due modifiche al codice dell'evento clic del controllo Button:

  • Assegnazione a Session dell'istanza ArrayList creata.
  • Sostituzione delle ultime due righe di codice, che consentono di configurare e visualizzare il report, con una chiamata al metodo ConfigureCrystalReports() per eseguire tale funzione su una serie di righe di codice comuni.

Per modificare il codice nel metodo di evento clic del controllo Button in modo da utilizzare la persistenza Session

  1. Eliminare le ultime due righe di codice del metodo di evento clic del controllo Button.

    La prima riga di codice da eliminare è la chiamata al metodo SetCurrentValuesForParameterField(). La seconda riga da eliminare è quella che collega l'istanza customersByCityReport alla proprietà ReportSource del controllo CrystalReportViewer.

    Nel passaggio successivo vengono aggiunte due nuove righe di codice per sostituire quelle eliminate.

  2. All'interno del metodo di evento clic del controllo Button, fuori dal ciclo foreach, aggiungere una riga di codice che assegni l'istanza ArrayList a Session.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\Aa983431.alert_note(it-it,VS.90).gif" alt="Note" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Per la persistenza Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa.</p></td>
</tr>
</tbody>
</table>

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

``` csharp
Session["arrayList"] = arrayList;
```
  1. Chiamare il metodo ConfigureCrystalReports().

    Ciò consente di recuperare l'istanza ArrayList, applicarla al report e collegare quest'ultimo al controllo CrystalReportViewer.

    ConfigureCrystalReports()
    
    ConfigureCrystalReports();
    

A questo punto è possibile creare ed eseguire il progetto per verificare se il campo parametro è stato reimpostato correttamente.

NoteNota

Un approccio alternativo alla persistenza consiste nel rendere persistente l'istanza ReportDocument. Per informazioni su come rendere persistente l'istanza ReportDocument in Session, vedere l'esercitazione Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session.

Per verificare la compilazione del controllo ListBox defaultParameterValuesList

  1. Dal menu Genera, scegliere Genera soluzione.

  2. Se si verificano errori di generazione, correggerli.

  3. Dal menu Debug, scegliere Avvia.

  4. Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco.

  5. Fare clic su Rivisualizza report.

La pagina viene ricaricata visualizzando i record dei clienti di tutte le città. Si tratta di un report di grandi dimensioni contenente numerose pagine.
  1. Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente.

  2. L'elenco delle città selezionate viene mantenuto e viene visualizzata la pagina 2 del report.

  3. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.