Condividi tramite


Impostazione manuale di parametri nel codice

A questo punto è possibile impostare due valori ("Paris" e "Tokyo") nel campo parametro Città del report CustomersByCity.

Ciò implica l'esigenza di aggiungere nuovo codice, operazione che è opportuno suddividere nei seguenti processi:

  • È necessaria una costante PARAMETER_FIELD_NAME per contenere il nome del campo parametro "Città".
  • Il codice per l’aggiunta di valori correnti al parametro Città viene utilizzato in diversi punti di questa esercitazione; per questo motivo viene creato come metodo di supporto separato.
  • All’interno del metodo ConfigureCrystalReports(), aggiungere i parametri "Paris" e "Tokyo" a un’istanza ArrayList e passare il report e l’istanza ArrayList al metodo di supporto per l’elaborazione.

Per creare una costante PARAMETER_FIELD_NAME

  1. Tornare alla classe di codice sottostante del Web Form o Windows Form.

  2. A livello di classe, creare una nuova costante di stringa, PARAMETER_FIELD_NAME, e impostarne il valore su "Città".

    Private Const PARAMETER_FIELD_NAME As String = "City"
    
    private const string PARAMETER_FIELD_NAME = "City";
    

Per creare un metodo di supporto che aggiunga valori correnti al parametro del report

A questo punto è possibile creare il metodo di supporto che aggiunge valori correnti al parametro del report.

  1. Tornare alla classe di codice sottostante del Web Form o Windows Form.

  2. Sopra la firma della classe, all'inizio della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] per lo spazio dei nomi System.Collections (se non è stato già dichiarato).

<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>Questa dichiarazione è necessaria per accedere alla classe ArrayList.</p></td>
</tr>
</tbody>
</table>

``` vb
Imports System.Collections
```

``` csharp
using System.Collections;
```
  1. Alla fine della classe, creare un nuovo metodo privato denominato SetCurrentValuesForParameterField() con due variabili nella firma: ParameterFields e ArrayList.
``` vb
Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As ParameterFields, ByVal myArrayList As
ArrayList)

End Sub
```

``` csharp
private void SetCurrentValuesForParameterField(ParameterFields parameterFields, ArrayList arrayList)
{
}
```
  1. In questo metodo, dichiarare e creare un’istanza della classe indicizzata ParameterValues come variabile currentParameterValues.
<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>Affinché sia possibile accedere alla classe ParameterValues, è necessario includere una dichiarazione &quot;Imports&quot; [Visual Basic] o &quot;using&quot; [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in <a href="ms227453(v=vs.90).md">Configurazione di un progetto</a>).</p></td>
</tr>
</tbody>
</table>

``` vb
Dim currentParameterValues As ParameterValues = New ParameterValues()
```

``` csharp
ParameterValues currentParameterValues = new ParameterValues();
```
  1. Creare un ciclo foreach per recuperare tutti i valori inseriti (come tipo Object) dall’istanza ArrayList.
<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>In questo metodo, vengono recuperati i valori da ArrayList e in seguito viene scritto il codice per aggiungere i valori ad ArrayList.</p></td>
</tr>
</tbody>
</table>

``` vb
For Each submittedValue As Object In myArrayList

Next
```

``` csharp
foreach(object submittedValue in arrayList)
{
}
```
  1. All’interno del ciclo foreach, dichiarare e creare un’istanza per la classe ParameterDiscreteValue.

    Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
    
    ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
    
  2. Nel ciclo foreach, convertire submittedValue in stringa e passarla alla proprietà Value dell’istanza ParameterDiscreteValue.

    myParameterDiscreteValue.Value = submittedValue.ToString()
    
    parameterDiscreteValue.Value = submittedValue.ToString();
    
  3. Nel ciclo foreach, aggiungere l’istanza ParameterDiscreteValue nella classe indicizzata currentParameterValues.

Questo completa il codice nel ciclo foreach. Il resto del codice, descritto nei passaggi successivi, viene posizionato dopo il ciclo foreach.

``` vb
currentParameterValues.Add(myParameterDiscreteValue)
```

``` csharp
currentParameterValues.Add(parameterDiscreteValue);
```
  1. Fuori dal ciclo foreach, 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. Passare l’istanza currentParameterValues alla proprietà CurrentValues dell’istanza ParameterField.

    myParameterField.CurrentValues = currentParameterValues
    
    parameterField.CurrentValues = currentParameterValues;
    

Per chiamare il metodo SetCurrentValuesForParameterField () prima che il report sia collegato al controllo CrystalReportViewer

In questa procedura è stato descritto come creare un metodo che recupera valori da un’istanza ArrayList e li posiziona come valori correnti in un’istanza ParameterField. A questo punto, affinché il report rilevi le impostazioni del parametro, è necessario chiamare il metodo prima di collegare il report al controllo CrystalReportViewer.

  1. Nel metodo ConfigureCrystalReports(), dichiarare e creare un'istanza ArrayList sopra la riga che collega il report al controllo CrystalReportViewer.

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  2. Aggiungere i nomi di città "Paris" e "Tokyo" come stringhe all’istanza ArrayList.

    myArrayList.Add("Paris")
    myArrayList.Add("Tokyo")
    
    arrayList.Add("Paris");
    arrayList.Add("Tokyo");
    
  3. Sotto il codice che collega il controllo CrystalReportViewer, recuperare l'istanza ParameterFields dalla proprietà ParameterFieldInfo del controllo CrystalReportViewer.

    Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
    
    ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;
    
  4. Chiamare il metodo SetCurrentValuesForParameterField() e passare le istanze ParameterFields e ArrayList.

``` vb
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
```

``` csharp
SetCurrentValuesForParameterField(parameterFields, arrayList);
```

Per verificare il caricamento del report CustomersByCity

A questo punto è possibile creare ed eseguire il progetto. È previsto che il report venga visualizzato correttamente poiché è stato scritto il codice per l'impostazione dei valori correnti nel campo parametro.

  1. Dal menu Genera, scegliere Genera soluzione.
  2. Se si verificano errori di generazione, correggerli.
  3. Dal menu Debug, scegliere Avvia.
  4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.

Nella sezione successiva viene descritto come recuperare i valori predefiniti dal campo parametro e impostare tali valori in un controllo ListBox. Questi valori verranno utilizzati al termine dell’esercitazione per selezionare nuove città in modo dinamico e filtrare il report in base alle nuove città selezionate.