Binden an einen nicht eingebetteten Bericht, der in die ReportDocument-Klasse geladen wurde

Objektmodell

In diesem Berichtbindungsszenario wird ReportDocument verwendet (siehe Berichtbindung mit ReportDocument-Objektmodell).

Ort des Berichts

Berichte befinden sich im Dateiverzeichnis.

Beschreibung

Dieses Berichtbindungsszenario ermöglicht Ihnen bei nicht eingebetteten (außerhalb des Projekts befindlichen) Berichten die Verwendung des leistungsfähigeren ReportDocument-Objektmodells.

Unter Binden an einen Dateiverzeichnispfad im Code findet die Berichtbindung über die zugehörigen Zeichenfolgen für den Dateiverzeichnispfad statt. Anstatt die Verzeichnispfade jedoch direkt an den Viewer zu binden, übergeben Sie sie an die ReportDocument.Load()-Methode. Dies ermöglicht Ihnen die Verwendung des ReportDocument-Objektmodells.

NoteAnmerkung

Weitere Informationen finden Sie unter Welches Objektmodell sollte verwendet werden?.

Da jeder externe Bericht in die allgemeine Klasse ReportDocument geladen wird, können Sie auch einen Prozess zur Berichtauswahl entwickeln, der für sämtliche Berichte einen gemeinsamen Berichtbindungscode verwendet. Dieser ähnelt dem Code im Abschnitt "Implementierung" des Berichtbindungsszenarios Binden an eine Klasse eingebetteter Berichte, für die ein Upcast auf ReportDocument ausgeführt wurde.

Pro

  • Geringer Verwaltungsaufwand: Die Berichte können hinzugefügt, entfernt oder geändert werden, ohne dass die Anwendung neu kompiliert werden muss.
  • Umfangreiche programmatische Interaktion: Bietet Zugriff auf das leistungsfähige ReportDocument-Objektmodell.
  • Geringerer Codierungsaufwand durch gemeinsame Codenutzung: Ist mit der Verwendung des Berichtbindungsszenarios Binden an eine Klasse eingebetteter Berichte, für die ein Upcast auf ReportDocument ausgeführt wurde vergleichbar. Berichte können gemeinsamen Code verwenden, da alle Berichte in die allgemeine ReportDocument-Klasse geladen werden.

Contra

  • Begrenzte Verteilung: Berichte müssen sich auf demselben Computer befinden wie die Anwendung. (Der Zugriff über das ASPNET-Anwenderkonto des Webservers auf andere Netzwerkserver ist normalerweise beschränkt.)
  • Zusätzlicher Aufwand bei der Bereitstellung: Berichte müssen mit der Anwendung im richtigen relativen Pfad weitergegeben werden.
  • Unsicherere Berichtquelle: Es besteht die Gefahr, dass Berichte zur Laufzeit auf dem Bereitstellungscomputer verschoben/entfernt werden.

So binden Sie mit Hilfe des ReportDocument-Objektmodells an nicht eingebettete Berichte

NoteAnmerkung

Diese Prozedur funktioniert nur bei Projekten, die in Projekt-Setup erstellt wurden. Projekt-Setup enthält spezifische Namespaceverweise und Codekonfigurationen, die für diese Prozedur erforderlich sind. Die Prozedur kann ohne diese Konfiguration nicht ausgeführt werden. Führen Sie deshalb vor Beginn dieser Arbeitsschritte die Schritte unter Projekt-Setup aus.

  1. Fügen Sie am Anfang der Klasse für den CrystalDecisions.CrystalReports.Engine-Namespace eine der Anweisungen "Imports" [Visual Basic] oder "using" [C#] hinzu.
<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 Deklaration dieses Namespaces ist erforderlich, damit ohne Namespacepräfix auf die ReportDocument-Klasse zugegriffen werden kann.</p></td>
</tr>
</tbody>
</table>

``` vb
Imports CrystalDecisions.CrystalReports.Engine
```

``` csharp
using CrystalDecisions.CrystalReports.Engine;
```
  1. Suchen Sie den Bericht "World Sales Report.rpt" im Unterverzeichnis "General Business" Ihrer Crystal Reports-Version. Informationen zu Musterberichten finden Sie unter Verzeichnis "Samples".

  2. Kopieren Sie den vollständigen Verzeichnispfad einschließlich "World Sales Report.rpt" in die Zwischenablage.

  3. Deklarieren Sie innerhalb der (im Projekt-Setup erstellten) ConfigureCrystalReports()-Methode eine reportPath-Zeichenfolgenvariable, und weisen Sie eine Zeichenfolge zu, die den im vorherigen Schritt kopierten Verzeichnispfad der Datei "World Sales Report" enthält.

    Dim reportPath As String = _
    "C:\Programme\Microsoft Visual Studio 9.0\" _ & "Crystal Reports\Samples\De\Reports\General Business\" _ & "World Sales Report.rpt"
    
    string reportPath =
    "C:\\Programme\\Microsoft Visual Studio 9.0\\" + "Crystal Reports\\Samples\\De\\Reports\\General Business\\" + "World Sales Report.rpt";
    
  4. Deklarieren Sie unterhalb der Zeichenfolgendeklaration eine Instanz von ReportDocument.

    Dim myReportDocument As ReportDocument = New ReportDocument()
    
    ReportDocument reportDocument = new ReportDocument();
    
  5. Laden Sie die Zeichenfolgenvariable, die den Verzeichnispfad der Datei enthält, in die Klasse nicht eingebetteter Berichte in ReportDocument.

    myReportDocument.Load(reportPath)
    
    reportDocument.Load(reportPath);
    
  6. Weisen Sie der ReportSource-Eigenschaft des CrystalReportViewer-Steuerelements die ReportDocument-Instanz zu (die jetzt die geladene Klasse nicht eingebetteter Berichte enthält).

    myCrystalReportViewer.ReportSource = myReportDocument
    
    crystalReportViewer.ReportSource = reportDocument;
    
  7. Um den Bericht anzeigen zu lassen, erstellen Sie Ihr Projekt und führen es aus.

Siehe auch