Binden des Berichts

Sofern Sie die Vorbereitungen für dieses Lernprogramm entsprechend den Anweisungen im Abschnitt Projekt-Setup getroffen haben, befindet sich jetzt ein CrystalReportViewer-Steuerelement auf dem Web Form oder Windows Form. In den vorangehenden Schritten haben Sie dem Projekt einen Bericht mit dem Namen "CustomersByCity" hinzugefügt.

In diesem Abschnitt instantiieren Sie den Bericht "CustomersByCity" und binden ihn an das CrystalReportViewer-Steuerelement. Anschließend testen Sie, ob der Bericht ordnungsgemäß angezeigt wird, wenn für dessen Parameterfeld keine aktuellen Werte festgelegt wurden.

Sie können den Bericht auf zweifache Weise instantiieren und binden:

  • als eingebetteten Bericht
  • als nicht eingebetteten Bericht

Entscheiden Sie sich für eine der folgenden schrittweisen Anleitungen.

  • Wenn Sie eingebettete Berichte verwenden, führen Sie die folgende Prozedur aus, um den Bericht als eingebetteten Bericht zu instantiieren.
  • Wenn Sie nicht eingebettete Berichte verwenden, führen Sie die zweite Prozedur aus, um den Bericht als nicht eingebetteten Bericht zu instantiieren.

So instantiieren Sie den Bericht "CustomersByCity" als eingebetteten Bericht und binden ihn an das CrystalReportViewer-Steuerelement

  1. Öffnen Sie das Web Form oder Windows Form.

  2. Klicken Sie im Menü Ansicht auf Code, um die CodeBehind-Klasse dieses Web Forms oder Windows Forms anzeigen zu lassen.

  3. Fügen Sie für die Wrapperklasse des Berichts "CustomersByCity" eine neue Deklaration auf Klassenebene hinzu, und verwenden Sie dabei den Variablennamen customersByCityReport. Setzen Sie den Zugriffsmodifizierer auf "private".

    Private customersByCityReport As CustomersByCity
    
    private CustomersByCity customersByCityReport;
    
  4. Instantiieren Sie die Berichtwrapperklasse innerhalb der ConfigureCrystalReports()-Methode.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\xkh1wxd8.alert_note(de-de,VS.90).gif" alt="Note" class="note" />Anmerkung</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Sie haben die ConfigureCrystalReports()-Methode in <a href="https://msdn.microsoft.com/de-de/library/vs%7ccrystlmn%7c%7e%5chtml%5ctopic168.htm(v=VS.90)">Projekt-Setup</a> erstellt.</p></td>
</tr>
</tbody>
</table>

``` vb
customersByCityReport = New CustomersByCity()
```

``` csharp
customersByCityReport = new CustomersByCity();
```
  1. Binden Sie die ReportSource-Eigenschaft des CrystalReportViewer-Steuerelements in der nächsten Zeile unterhalb der Berichtinstantiierung an die instantiierte Berichtklasse (Variablenname: customersByCityReport).

    myCrystalReportViewer.ReportSource = customersByCityReport
    
    crystalReportViewer.ReportSource = customersByCityReport;
    
    NoteAnmerkung

    Auf die Instanz des CrystalReportViewer-Steuerelements kann im Code zugegriffen werden, da das Steuerelement dem Web Form bzw. Windows Form hinzugefügt wurde. Wenn die Instanz des CrystalReportViewer-Steuerelements von IntelliSense nicht erkannt wird, sollten Sie überprüfen, ob das CrystalReportViewer-Steuerelement dieser CodeBehind-Klasse als Deklaration auf Klassenebene hinzugefügt wurde.

So instantiieren Sie den Bericht "CustomersByCity" als nicht eingebetteten Bericht und binden ihn an das CrystalReportViewer-Steuerelement

Sie können nun beginnen, Ihr Projekt zu erstellen und auszuführen. Es ist davon auszugehen, dass der Bericht nicht geladen wird, da noch kein Code zum Festlegen eines Werts für das Parameterfeld "Ort" geschrieben wurde.

  1. Öffnen Sie das Web Form oder Windows Form.

  2. Klicken Sie im Menü Ansicht auf Code.

  3. Fügen Sie für die Berichtwrapperklasse ReportDocument eine neue Deklaration auf Klassenebene hinzu, und verwenden Sie dabei den Variablennamen customersByCityReport. Setzen Sie den Zugriffsmodifizierer auf "private".

    Private customersByCityReport As ReportDocument
    
    private ReportDocument customersByCityReport;
    
    NoteAnmerkung

    Die ReportDocument-Klasse ist ein Element des CrystalDecisions.CrystalReports.Engine-Namespaces. Sie haben unter Projekt-Setup eine der Deklarationen "Imports" [Visual Basic] oder "using" [C#] für diesen Namespace hinzugefügt. Wenn Sie ReportDocument instantiieren und einen Bericht in den Namespace laden, können Sie über das SDK auf den Bericht zugreifen, ohne den Bericht einzubetten.

  4. Instantiieren Sie innerhalb der (während eines der Verfahren unter Projekt-Setup hinzugefügten) ConfigureCrystalReports()-Methode die ReportDocument-Klasse.

``` vb
customersByCityReport = New ReportDocument()
```

``` csharp
customersByCityReport = new ReportDocument();
```
  1. Deklarieren Sie eine Zeichenfolgenvariable, geben Sie ihr den Namen "reportPath", und weisen Sie ihr den Laufzeitpfad zum lokalen Bericht zu. Dieser Pfad wird für Website- und Windows-Projekte unterschiedlich definiert:

    • Bei einer Website übergeben Sie den Namen der lokalen Berichtsdatei als Zeichenfolgenparameter an die Server.MapPath()-Methode. Dadurch wird der lokale Bericht dem Dateiverzeichnispfad auf der Festplatte zur Laufzeit zugeordnet.

      Dim reportPath As String = Server.MapPath("CustomersByCity.rpt")
      
      string reportPath = Server.MapPath("CustomersByCity.rpt");
      
    • Bei einem Windows-Projekt verketten Sie die Application.StartupPath-Eigenschaft mit einem umgekehrten Schrägstrich und dem Namen der lokalen Berichtsdatei. In diesem Fall wird der Bericht demselben Verzeichnis zugeordnet, in dem sich auch die ausführbare Windows-Datei befindet.

      NoteAnmerkung

      Zur Kompilierungszeit kopieren Sie den Bericht in das Verzeichnis, in dem sich die ausführbare Datei befindet.

      Dim reportPath As String = Application.StartupPath & "\" & "CustomersByCity.rpt"
      
      string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt";
      
  2. Rufen Sie die Load()-Methode der ReportDocument-Instanz auf, und übergeben Sie die reportPath-Zeichenfolgenvariable an sie.

``` vb
customersByCityReport.Load(reportPath)
```

``` csharp
customersByCityReport.Load(reportPath);
```
  1. Binden Sie in der nächsten Zeile, die auf das Laden des Berichts folgt, die ReportSource-Eigenschaft des CrystalReportViewer-Steuerelements an die ReportDocument-Instanz.

    myCrystalReportViewer.ReportSource = customersByCityReport
    
    crystalReportViewer.ReportSource = customersByCityReport;
    

Unabhängig davon, ob Sie sich für die Instantiierung der Klasse eines eingebetteten oder nicht eingebetteten Berichts über die ReportDocument-Klasse entschieden haben, wird immer derselbe Variablenname verwendet: customersByCityReport. Dies ermöglicht Ihnen in den folgenden Prozeduren die Verwendung eines allgemeinen Codesatzes.

Sie können nun beginnen, Ihr Projekt zu erstellen und auszuführen. Es ist davon auszugehen, dass der Bericht nicht geladen wird, da noch kein Code zum Festlegen eines Werts für das Parameterfeld "Ort" geschrieben wurde. Später in diesem Lernprogramm werden Sie einen Wert für das Parameterfeld "Ort" hinzufügen.

So überprüfen Sie das Laden des Berichts "CustomersByCity"

  1. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  2. Sollten Buildfehler vorhanden sein, beheben Sie diese jetzt bitte.

  3. Bei einem nicht eingebetteten Bericht in einem Windows-Projekt suchen Sie die kompilierte ausführbare Windows-Datei im Unterverzeichnis \bin\ [Visual Basic] oder \bin\debug\ [C#], und kopieren Sie den Bericht in dieses Unterverzeichnis.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\xkh1wxd8.alert_note(de-de,VS.90).gif" alt="Note" class="note" />Anmerkung</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Damit der nicht eingebettete Bericht von der ausführbaren Windows-Datei zur Laufzeit geladen wird, muss der Bericht im selben Verzeichnis wie die ausführbare Windows-Datei gespeichert werden.</p></td>
</tr>
</tbody>
</table>
  1. Klicken Sie im Menü Debuggen auf Debuggen starten.
Der Bericht "CustomersByCity" wird nicht angezeigt. Er ist erst sichtbar, nachdem Sie später in diesem Lernprogramm einen Wert für das Parameterfeld "Ort" hinzugefügt haben.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\xkh1wxd8.alert_note(de-de,VS.90).gif" alt="Note" class="note" />Anmerkung</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Die Ergebnisse können je nach verwendeter Crystal Reports-Version variieren. In neueren Versionen wird ein Formular angezeigt, in dem Sie aufgefordert werden, Parameterwerte für diesen Bericht einzugeben. In früheren Versionen wird eine Ausnahme vom Typ &quot;Aktueller Wert für Parameterfeld fehlt&quot; ausgelöst. In beiden Fällen fügen Sie weiteren Code hinzu, um eine voll funktionsfähige Anwendung zu erhalten.</p></td>
</tr>
</tbody>
</table>
  1. Kehren Sie zu Visual Studio zurück, und klicken Sie auf Debuggen beenden, um den Debugmodus zu verlassen.