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 compilare il controllo ListBox.

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:
  4. Fare clic sul controllo CrystalReportViewer per selezionarlo.
  5. Premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio.
  6. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni:
    1. Fare clic sul controllo CrystalReportViewer per selezionarlo.
    2. Nella finestra Proprietà, impostare Dock su "Bottom."
    3. Ridimensionare il controllo CrystalReportViewer, in modo da lasciare spazio sufficiente sopra di esso per il controllo ListBox.
    4. Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right."
  7. Dalla casella degli strumenti, trascinare un controllo ListBox sul controllo CrystalReportViewer.
  8. Fare clic sul controllo ListBox per selezionarlo.
  9. Nella finestra Proprietà, effettuare le seguenti operazioni:
  10. Impostare ID o Name su "defaultParameterValuesList".
  11. Impostare SelectionMode su "Multiple" (ovvero su "MultiExtended" in un progetto Windows).
  12. Dal menu File, scegliere Salva tutto.

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

A questo punto è possibile 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 ParameterFields passato nella firma del metodo.

``` vb
Private Function GetDefaultValuesFromParameterField(ByVal
myParameterFields As ParameterFields) As ArrayList

End Function
```

``` csharp
private ArrayList
GetDefaultValuesFromParameterField(ParameterFields parameterFields)
{
}
```
  1. Recuperare l’istanza ParameterField dalla classe indicizzata ParameterFields, basata sulla voce di indice della costante PARAMETER_FIELD_NAME.

    Dim myParameterField As ParameterField =
    myParameterFields(PARAMETER_FIELD_NAME)
    
    ParameterField parameterField =
    parameterFields[PARAMETER_FIELD_NAME];
    
  2. Recuperare una classe indicizzata ParameterValues (come variabile defaultParameterValues) dalla proprietà DefaultValues dell’istanza ParameterField.

    Dim defaultParameterValues As ParameterValues =
    myParameterField.DefaultValues
    
    ParameterValues defaultParameterValues =
    parameterField.DefaultValues;
    
  3. Dichiarare e creare un’istanza di ArrayList.

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  4. Creare un ciclo foreach per recuperare tutte le istanze ParameterValue da 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:

``` vb
For Each myParameterValue As ParameterValue In
defaultParameterValues

Next
```

``` csharp
foreach(ParameterValue parameterValue in defaultParameterValues)
{
}
```
  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, DiscreteParameterValue.

    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 ListBoxdefaultParameterValuesList.

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 recupera l'istanza ParameterFields.

  2. All'interno delle interruzioni di riga, creare un blocco condizionale Not 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.

    If Not IsPostBack Then
    
    End If
    
    if(!IsPostBack)
    {
    }
    
  3. All'interno del blocco condizionale Not IsPostBack, impostare la proprietà DataSource del controllo ListBoxdefaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza ParameterFields come parametro di metodo.

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

``` csharp
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(parameterFields);
```
  1. Sempre all'interno del blocco condizionale Not IsPostBack, chiamare il metodo DataBind() del controllo ListBoxdefaultParameterValuesList.
``` 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 recupera l'istanza ParameterFields.
All'interno delle interruzioni di riga create è possibile inserire codice aggiuntivo per impostare l'origine dati per il controllo ListBox defaultParameterValuesList quando la pagina viene caricata per la prima volta.
  1. All'interno delle interruzioni di riga, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza ParameterFields come parametro di metodo.
``` vb
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(myParameterFields)
```

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

Per verificare la compilazione del controllo ListBox defaultParameterValuesList

A questo punto è possibile creare ed eseguire il progetto per verificare se il controllo ListBoxdefaultParameterValuesList è 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 ListBoxdefaultParameterValuesList 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.