Hinzufügen des Codes zur Berichtanmeldung

Jetzt können Sie der CodeBehind-Klasse den Anmeldecode hinzufügen. Zunächst erstellen Sie eine private Hilfsmethode mit dem Namen SetDBLogonForReport().

So erstellen und codieren Sie die SetDBLogonForReport()-Methode

  1. Kehren Sie zur CodeBehind-Klasse dieses Web Forms oder Windows Forms zurück.

  2. Erstellen Sie am Ende der Klasse eine neue private Methode mit dem Namen SetDBLogonForReport(), die die beiden Parameter ConnectionInfo und ReportDocument enthält.

``` vb
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)

End Sub
```

``` csharp
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
}
```
  1. Rufen Sie innerhalb dieser Methode die Tables-Instanz aus der Tables-Eigenschaft der Database-Eigenschaft des ReportDocument-Parameters ab.
<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>&quot;Tables&quot; ist eine Indexklasse, die Instanzen der Table-Klasse enthält.</p></td>
</tr>
</tbody>
</table>

``` vb
Dim myTables As Tables = myReportDocument.Database.Tables
```

``` csharp
Tables tables = reportDocument.Database.Tables;
```
  1. Erstellen Sie eine foreach-Schleife, die jede Table-Instanz in der Instanz der Tables-Indexklasse durchläuft.
<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>Fügen Sie den vollständigen Namespacepfad zur Table-Klasse hinzu, um die Klasse von der Table-Klasse des System.Web.UI.WebControls-Namespaces zu unterscheiden.</p></td>
</tr>
</tbody>
</table>

``` vb
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables

Next
```

``` csharp
foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
}
```
  1. Rufen Sie innerhalb der foreach-Schleife die TableLogonInfo-Instanz aus der LogOnInfo-Eigenschaft der Table-Instanz ab.

    Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
    
    TableLogOnInfo tableLogonInfo = table.LogOnInfo;
    
  2. Setzen Sie die ConnectionInfo-Eigenschaft von TableLogonInfo innerhalb der foreach-Schleife auf den ConnectionInfo-Parameter.

    myTableLogonInfo.ConnectionInfo = myConnectionInfo
    
    tableLogonInfo.ConnectionInfo = connectionInfo;
    
  3. Übergeben Sie die TableLogonInfo-Instanz innerhalb der foreach-Schleife als Parameter an die ApplyLogonInfo-Methode der Table-Instanz.

    myTable.ApplyLogOnInfo(myTableLogonInfo)
    
    table.ApplyLogOnInfo(tableLogonInfo);
    

Durch dieses Verfahren wurde eine Methode zum Festlegen der Anmeldeinformationen für die Datenbank erstellt. Die ConfigureCrystalReports()-Methode muss jedoch geändert werden, um auf diese Methode zuzugreifen, damit ersichtlich ist, dass der Bericht über Datenbankanmeldeinformationen verfügt.

Zum Ändern der ConfigureCrystalReports()-Methode sind zwei Aktionen erforderlich:

  • Konfigurieren der ConnectionInfo-Instanz.
  • Aufrufen der SetDBLogonForReport()-Methode.

So ändern Sie die ConfigureCrystalReports()-Methode für den Zugriff auf den Datenbankanmeldecode

  1. Geben Sie in der ConfigureCrystalReports()-Methode oberhalb der Zeile, durch die der Bericht an das CrystalReportViewer-Steuerelement gebunden wird, einige Zeilenumbrüche in den Code ein.

  2. Deklarieren und instantiieren Sie innerhalb dieser Zeilen die ConnectionInfo-Klasse.

<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 auf die ConnectionInfo-Klasse zugegriffen werden kann, fügen Sie am Anfang der CodeBehind-Klasse die Anweisung &quot;Imports&quot; [Visual Basic] oder &quot;using&quot; [C#] für den CrystalDecisions.Shared-Namespace hinzu. (Sie haben diese Deklaration in <a href="https://msdn.microsoft.com/de-de/library/vs%7ccrystlmn%7c%7e%5chtml%5ctopic168.htm(v=VS.90)">Projekt-Setup</a> hinzugefügt.)</p></td>
</tr>
</tbody>
</table>

``` vb
Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
```

``` csharp
ConnectionInfo connectionInfo = new ConnectionInfo();
```
  1. Legen Sie die Eigenschaften DatabaseName und IntegratedSecurity der ConnectionInfo-Instanz fest.

    myConnectionInfo.DatabaseName = "Northwind"
    myConnectionInfo.IntegratedSecurity = True
    
    connectionInfo.DatabaseName = "Northwind";
    connectionInfo.IntegratedSecurity = true;
    
  2. Geben Sie einen Aufruf der SetDBLogonForReport()-Methode ein, indem Sie die ConnectionInfo-Instanz und den Bericht "NorthwindCustomers" übergeben.

``` vb
SetDBLogonForReport(myConnectionInfo, northwindCustomersReport)
```

``` csharp
SetDBLogonForReport(connectionInfo, northwindCustomersReport);
```

Auf diesen Aufruf folgt der ursprüngliche Code, durch den der Bericht an das CrystalReportViewer-Steuerelement gebunden wird.

Sie können nun beginnen, Ihr Projekt zu erstellen und auszuführen. Der Bericht sollte ordnungsgemäß geladen werden, da Sie Code zur Datenbankanmeldung hinzufügt haben.

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

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

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

  3. Klicken Sie im Menü Debuggen auf Debuggen starten.

Der Bericht "NorthwindCustomers" wird erfolgreich angezeigt.
  1. Kehren Sie zu Visual Studio zurück, und klicken Sie auf Debuggen beenden, um den Debugmodus zu verlassen.

Im nächsten Abschnitt erfahren Sie, wie Sie den Datenbankpfad zur Laufzeit ändern.