Collegamento del report
Durante lo svolgimento delle istruzioni riportate nella sezione Configurazione di un progetto di preparazione a questa esercitazione, un controllo CrystalReportViewer è stato inserito nel Web Form o nel Windows Form. Nei passaggi precedenti, il report CustomerByCity è stato aggiunto al progetto.
In questa sezione viene descritto come creare e collegare un'istanza del report CustomersByCity al controllo CrystalReportViewer. Viene quindi verificato se è possibile visualizzare correttamente il report quando i valori correnti del campo parametro non sono ancora stati impostati.
Esistono due metodi per creare e collegare un'istanza del report:
- Come report incorporato.
- Come report non incorporato.
Scegliere una delle seguenti procedure.
- Se si utilizzano report incorporati, seguire la prima procedura per creare un'istanza del report come report incorporato.
- Se si utilizzano report non incorporati, seguire la seconda procedura per creare un'istanza del report come report non incorporato.
Per creare un'istanza del report CustomersByCity come report incorporato e collegarla al controllo CrystalReportViewer
Aprire il Web Form o il Windows Form.
Dal menu Visualizza, scegliere Codice per visualizzare la classe di codice sottostante relativa al Web Form o al Windows Form.
Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report CustomersByCity, utilizzando il nome di variabile customersByCityReport. Impostare il modificatore di accesso su private.
Private customersByCityReport As CustomersByCity
private CustomersByCity customersByCityReport;
Nel metodo ConfigureCrystalReports(), creare un’istanza della classe wrapper del report.
<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>Il metodo ConfigureCrystalReports() è stato creato in <a href="ms227453(v=vs.90).md">Configurazione di un progetto</a>.</p></td>
</tr>
</tbody>
</table>
``` vb
customersByCityReport = New CustomersByCity()
```
``` csharp
customersByCityReport = new CustomersByCity();
```
Nella riga successiva, sotto la creazione dell’istanza del report, collegare la proprietà ReportSource del controllo CrystalReportViewer alla classe del report di cui è stata creata l’istanza (nome variabile: customersByCityReport).
myCrystalReportViewer.ReportSource = customersByCityReport
crystalReportViewer.ReportSource = customersByCityReport;
Nota L'istanza del controllo CrystalReportViewer è accessibile nel codice poiché il controllo è stato aggiunto al Web Form o al Windows Form. Se IntelliSense non riconosce l'istanza del controllo CrystalReportViewer, verificare che il controllo CrystalReportViewer sia stato aggiunto come dichiarazione a livello di classe a questa classe di codice sottostante.
Per creare un'istanza del report CustomersByCity come report non incorporato e collegarla al controllo CrystalReportViewer
A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per l'impostazione di un valore per campo parametro Città non è stato ancora scritto.
Aprire il Web Form o il Windows Form.
Dal menu Visualizza, scegliere Codice.
Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report ReportDocument, utilizzando il nome di variabile customersByCityReport. Impostare il modificatore di accesso su private.
Private customersByCityReport As ReportDocument
private ReportDocument customersByCityReport;
Nota La classe ReportDocument è membro dello spazio dei nomi CrystalDecisions.CrystalReports.Engine per il quale è stata aggiunta una dichiarazione "Imports" [Visual Basic] o "using" [C#] in Configurazione di un progetto. Quando si crea un'istanza di ReportDocument e si carica un report nello spazio dei nomi, si ottiene l'accesso al report tramite l'SDK, senza incorporare il report.
Nel metodo ConfigureCrystalReports() (aggiunto durante una delle procedure riportate in Configurazione di un progetto), creare un'istanza della classe ReportDocument.
``` vb
customersByCityReport = New ReportDocument()
```
``` csharp
customersByCityReport = new ReportDocument();
```
Dichiarare una variabile di stringa, denominarla reportPath e assegnarle un percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows:
In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido.
Dim reportPath As String = Server.MapPath("CustomersByCity.rpt")
string reportPath = Server.MapPath("CustomersByCity.rpt");
In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows.
Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile.
Dim reportPath As String = Application.StartupPath & "\" & "CustomersByCity.rpt"
string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt";
Chiamare il metodo Load() dell'istanza ReportDocument e passargli la variabile di stringa reportPath.
``` vb
customersByCityReport.Load(reportPath)
```
``` csharp
customersByCityReport.Load(reportPath);
```
Nella riga successiva, sotto il caricamento del report, collegare la proprietà ReportSource del controllo CrystalReportViewer all'istanza ReportDocument.
myCrystalReportViewer.ReportSource = customersByCityReport
crystalReportViewer.ReportSource = customersByCityReport;
A prescindere dal fatto che si sia scelto di creare un'istanza di una classe di report incorporato o di una classe di report non incorporato, il nome di variabile utilizzato è sempre lo stesso: customersByCityReport. Questo consente di utilizzare le stesse righe di codice nelle procedure che seguono.
A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per l'impostazione di un valore per campo parametro Città non è stato ancora scritto. Più avanti nel corso di questa esercitazione viene descritto come aggiungere un valore per il campo parametro Città.
Per verificare il caricamento del report CustomersByCity
Dal menu Genera, scegliere Genera soluzione.
Se si verificano errori di generazione, correggerli.
Se si utilizza un report non incorporato in un progetto Windows, individuare l'eseguibile Windows compilato nella sottodirectory \bin\ [Visual Basic] o \bin\debug\ [C#] e copiarvi il report.
<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é il report non incorporato venga caricato dall'eseguibile Windows in fase di esecuzione, è necessario salvare il report nella stessa directory dell'eseguibile.</p></td>
</tr>
</tbody>
</table>
- Dal menu Debug, scegliere Avvia.
Il report CustomersByCity non verrà visualizzato. Per visualizzarlo, è necessario aggiungere un valore per il campo parametro Città, più avanti nel corso di questa esercitazione.
<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>I risultati possono variare, in base alla versione di Crystal Reports in uso. Nelle versioni più recenti, viene visualizzato un form in cui si richiede di inserire i valori per il parametro del report. In quelle precedenti, invece, viene generata l'eccezione "Valore corrente del campo parametro mancante". In entrambi i casi, per creare un'applicazione completamente funzionale è necessario aggiungere codice supplementare.</p></td>
</tr>
</tbody>
</table>
- Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug.