Condividi tramite


Creazione di un controllo ListBox che visualizzi i parametri predefiniti

Nella restante parte dell’esercitazione viene descritto come visualizzare un elenco completo di valori predefiniti per il campo parametro in un controllo ListBox e come filtrare il contenuto del report in base alle selezioni effettuate nel controllo ListBox.

In questa sezione viene descritto come compilare il controllo ListBox con i valori predefiniti del campo parametro.

NoteNota

È importante ricordare che i valori predefiniti, ovvero un lungo elenco di città, sono stati impostati al momento della creazione del report all’inizio dell’esercitazione.

A questo punto è necessario aggiungere e configurare un controllo ListBox, quindi creare un metodo di supporto per compilarlo.

Per creare e configurare un controllo ListBox sul form

  1. Aprire il Web Form o il Windows Form.

  2. Dal menu Visualizza, scegliere Finestra di progettazione.

  3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni:

    • Fare clic sul controllo CrystalReportViewer per selezionarlo.
    • Premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio.
Il controllo CrystalReportViewer si sposta in basso di una riga.
  1. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni:

    • Fare clic sul controllo CrystalReportViewer per selezionarlo.
    • Nella finestra Proprietà, impostare Dock su "Bottom".
      NoteNota

      In Visual Studio, quando si seleziona la proprietà Dock, viene visualizzata una cornice anziché un elenco di opzioni. Selezionare la parte della cornice che corrisponde all'impostazione “Bottom”.

    • Ridimensionare il Windows Form e il controllo CrystalReportViewer in modo che quest'ultimo sia sufficientemente grande da visualizzare un report e lasciare spazio sopra di esso per un controllo ListBox.
    • Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right".
    • Ridimensionare il Windows Form e il controllo CrystalReportViewer in modo che quest'ultimo sia sufficientemente grande da visualizzare un report e lasciare spazio sopra di esso per un controllo ListBox.
  2. Dalla casella degli strumenti, trascinare un controllo ListBox sul controllo CrystalReportViewer.

<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>Se si utilizza Visual Studio e viene visualizzata una Smart Task nel controllo ListBox, premere Esc per chiuderla.</p></td>
</tr>
</tbody>
</table>
  1. Fare clic sul controllo ListBox per selezionarlo.

  2. Nella finestra Proprietà:

    • Impostare ID o Name su "defaultParameterValuesList".
    • Impostare SelectionMode su "Multiple" (ovvero su "MultiExtended" in un progetto Windows).
  3. Dal menu File, scegliere Salva tutto.

A questo punto è possibile creare un metodo di supporto che recuperi i valori predefiniti dal campo parametro.

Per creare un metodo di supporto che recuperi i valori predefiniti dal campo parametro

  1. Aprire il Web Form o il Windows Form.

  2. Dal menu Visualizza, scegliere Codice.

  3. Alla fine della classe, creare un nuovo metodo privato denominato GetDefaultValuesFromParameterField() che restituisca un’istanza ArrayList, con ReportDocument passato nella firma del metodo.

``` vb
Private Function GetDefaultValuesFromParameterField(ByVal myReportDocument As ReportDocument) As ArrayList

End Function
```

``` csharp
private ArrayList GetDefaultValuesFromParameterField(ReportDocument reportDocument)
{
}
```
  1. All’interno del metodo GetDefaultValuesFromParameterField(), recuperare la classe indicizzata ParameterFieldDefinitions, che proviene dalla proprietà DataDefinition dell’istanza ReportDocument.
``` vb
Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields
```

``` csharp
ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
```
  1. Recuperare l’istanza ParameterFieldDefinition dalla classe indicizzata ParameterFieldDefinitions, basata sulla voce di indice della costante PARAMETER_FIELD_NAME.

    Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(PARAMETER_FIELD_NAME)
    
    ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[PARAMETER_FIELD_NAME];
    
  2. Recuperare una classe indicizzata ParameterValues (come variabile defaultParameterValues) dalla proprietà DefaultValues dell’istanza ParameterFieldDefinition.

    Dim defaultParameterValues As ParameterValues = myParameterFieldDefinition.DefaultValues
    
    ParameterValues defaultParameterValues = parameterFieldDefinition.DefaultValues;
    
  3. Dichiarare e creare un’istanza ArrayList.

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  4. Creare un ciclo foreach per recuperare tutte le istanze ParameterValue da defaultParameterValues.

``` vb
For Each myParameterValue As ParameterValue In defaultParameterValues

Next
```

``` csharp
foreach(ParameterValue parameterValue in defaultParameterValues)
{
}
```

All’interno del ciclo foreach, creare un blocco condizionale nidificato che verifichi i valori di parametro discreto (in opposizione a quelli di intervallo). Esistono due versioni di questo blocco condizionale, poiché l'API è leggermente cambiata nelle diverse versioni di Crystal Reports per Visual Studio. Controllare l’API (utilizzando IntelliSense) per verificare quale proprietà è disponibile in ParameterValue:
  1. Se la proprietà disponibile è IsRange, all'interno del ciclo foreach inserire il seguente codice:

    If (Not myParameterValue.IsRange) Then
    
    End If
    
    if(!parameterValue.IsRange)
    {
    }
    
  2. Oppure, se la proprietà disponibile è Kind (DiscreteOrRangeKind, un'enumerazione con tre valori: DiscreteValue, RangeValue, DiscreteAndRangeValue), immettere il seguente codice all'interno del suddetto ciclo:

    If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then
    
    End If
    
    if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue)
    {
    }
    
  3. All'interno del blocco condizionale nidificato, eseguire il cast dell’istanza ParameterValue nella classe estesa, ParameterDiscreteValue.

    Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue)
    
    ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue;
    
  4. Sempre all'interno del blocco condizionale nidificato, aggiungere la proprietà Value dell’istanza ParameterDiscreteValue (convertita in stringa) all’istanza ArrayList.

    myArrayList.Add(myParameterDiscreteValue.Value.ToString())
    
    arrayList.Add(parameterDiscreteValue.Value.ToString());
    
  5. Fuori dal blocco condizionale e dal ciclo foreach, alla fine del metodo, restituire l’istanza ArrayList dal metodo.

    Return myArrayList
    
    return arrayList;
    

Per collegare l'ArrayList restituito dal metodo al controllo ListBox in un progetto Web

I valori predefiniti sono stati recuperati dal campo parametro e restituiti dal metodo come ArrayList. A questo punto è possibile collegare questo ArrayList al controllo defaultParameterValuesList ListBox.

Il codice varia leggermente a seconda che si utilizzi un progetto Web o Windows; pertanto, assicurarsi di completare solo la procedura appropriata, Web o Windows, tra quelle riportate di seguito.

  1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, subito dopo la riga che aggiunge il valore stringa Tokyo all'istanza di ArrayList.

    All'interno delle interruzioni create è possibile inserire il codice aggiuntivo per l'impostazione dell'origine dati per il controllo ListBox defaultParameterValuesList quando la pagina viene caricata per la prima volta.

  2. All'interno delle interruzioni di riga, creare un blocco condizionale Not IsPostBack.

    If Not IsPostBack Then
    
    End If
    
    if(!IsPostBack)
    {
    }
    
    NoteNota

    Il blocco condizionale Not IsPostBack viene utilizzato per incapsulare il codice che deve essere eseguito solo la prima volta che viene caricata la pagina. I controlli vengono in genere collegati ai valori dei dati nei blocchi condizionali Not IsPostBack, in modo che i valori dei dati (e tutti i successivi eventi di controllo) non siano reimpostati durante i ricaricamenti di pagina.

  3. All'interno del blocco condizionale Not IsPostBack, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza del report CustomersByCity come parametro di metodo.

``` vb
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport)
```

``` csharp
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport);
```
  1. Sempre all'interno del blocco condizionale Not IsPostBack, chiamare il metodo DataBind() del controllo ListBox defaultParameterValuesList.
``` vb
defaultParameterValuesList.DataBind()
```

``` csharp
defaultParameterValuesList.DataBind();
```

Per collegare l'ArrayList restituito dal metodo al controllo ListBox in un progetto Windows

  1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, subito dopo la riga che aggiunge il valore stringa Tokyo all'istanza di ArrayList.

    All'interno delle interruzioni create è possibile inserire il codice aggiuntivo per l'impostazione dell'origine dati per il controllo ListBox defaultParameterValuesList quando la pagina viene caricata per la prima volta.

  2. All'interno delle interruzioni di riga, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza del report CustomersByCity come parametro di metodo.

``` vb
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport)
```

``` csharp
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport);
```

Per verificare la compilazione del controllo ListBox defaultParameterValuesList

A questo punto è possibile creare ed eseguire il progetto per verificare se il controllo ListBox defaultParameterValuesList è stato compilato.

  1. Dal menu Genera, scegliere Genera soluzione.

  2. Se si verificano errori di generazione, correggerli.

  3. Dal menu Debug, scegliere Avvia.

Il controllo ListBox defaultParameterValuesList visualizza un elenco completo di valori predefiniti (ovvero città in questa esercitazione).
  1. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.

Nella sezione successiva viene descritto come aggiungere un pulsante per rivisualizzare il report in base alle selezioni del controllo ListBox defaultParameterValuesList.