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.
Per dimostrare la mancanza di persistenza nelle selezioni del parametro
Dal menu Genera, scegliere Genera soluzione.
Se si verificano errori di generazione, correggerli.
Dal menu Debug, scegliere Avvia.
Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco.
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.
- 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).
- Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.
Per aggiungere codice di persistenza al metodo ConfigureCrystalReports()
Per rendere persistenti le modifiche apportate al ricaricamento delle pagine Web, è necessario aggiungere codice di persistenza all'applicazione.
Iniziare aggiungendo il codice di persistenza al metodo ConfigureCrystalReports(), quindi aggiungere un blocco Else al blocco condizionale If 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.
- 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:
``` vb
If Not IsPostBack Then
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataBind()
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
End If
```
``` csharp
if (!IsPostBack)
{
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(parameterFields);
defaultParameterValuesList.DataBind();
arrayList.Add("Paris");
arrayList.Add("Tokyo");
}
```
- 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;
```
Aggiungere una condizione Else al blocco condizionale Not IsPostBack.
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:
If Not IsPostBack Then
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataBind()
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
Session("myArrayList") = myArrayList
Else
myArrayList = Ctype(Session("myArrayList"), ArrayList)
End If
if (!IsPostBack)
{
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields);
defaultParameterValuesList.DataBind();
arrayList.Add("Paris");
arrayList.Add("Tokyo");
Session["arrayList"] = arrayList;
}
else
{
arrayList = (ArrayList)Session["arrayList"];
}
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
Eliminare le ultime tre righe di codice del metodo di evento clic del controllo Button.
- La prima riga di codice da eliminare è quella che collega il percorso della directory di file del report alla proprietà ReportSource del controllo CrystalReportViewer.
- La seconda riga di codice da eliminare è quella che consente di recuperare l'istanza ParameterFields dalla proprietà ParameterFieldInfo del controllo CrystalReportViewer.
- La terza riga di codice da eliminare è la chiamata al metodo SetCurrentValuesForParameterField().
Nel passaggio successivo vengono aggiunte due nuove righe di codice per sostituire quelle eliminate.
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.
Nota Per la Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa.
Session("myArrayList") = myArrayList
Session["arrayList"] = arrayList;
Chiamare il metodo ConfigureCrystalReports().
Ciò consente di recuperare l'istanza ArrayList, applicarla al report e collegare quest'ultimo al controllo CrystalReportViewer.
``` vb
ConfigureCrystalReports()
```
``` csharp
ConfigureCrystalReports();
```
Per verificare la compilazione del controllo ListBox defaultParameterValuesList
A questo punto è possibile creare ed eseguire il progetto per verificare se il campo parametro è stato reimpostato correttamente.
Dal menu Genera, scegliere Genera soluzione.
Se si verificano errori di generazione, correggerli.
Dal menu Debug, scegliere Avvia.
Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco.
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.
Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente.
L'elenco delle città selezionate viene mantenuto e viene visualizzata la pagina 2 del report.
Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.