共用方式為


加入報表登入程式碼

您現在已經可以將登入程式碼加入程式碼後置 (Code-Behind) 類別中。首先要建立私用 Helper 方法 SetDBLogonForReport()。

若要建立和撰寫 SetDBLogonForReport() 方法的程式碼

  1. 返回此 Web 或 Windows Form 的程式碼後置類別。

  2. 在類別底部,以 ConnectionInfo 和 ReportDocument 兩個參數建立名稱為 SetDBLogonForReport() 的新私用方法。

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

End Sub
```

``` csharp
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
}
```
  1. 在此方法中,您將從 ReportDocument 參數之 Database 屬性的 Tables 屬性擷取 Tables 執行個體。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\36bhtx7w.alert_note(zh-tw,VS.90).gif" alt="Note" class="note" />附註</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Tables 為包含 Table 類別執行個體的索引類別。</p></td>
</tr>
</tbody>
</table>

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

``` csharp
Tables tables = reportDocument.Database.Tables;
```
  1. 請建立一個 foreach 迴圈,以在 Tables 索引類別執行個體中每一個 Table 執行個體間進行迴圈。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\36bhtx7w.alert_note(zh-tw,VS.90).gif" alt="Note" class="note" />附註</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>您必須將完整的命名空間路徑加入 Table 類別,以與 System.Web.UI.WebControls 命名空間的 Table 類別有所區分。</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. 在 foreach 迴圈中,請從 Table 執行個體的 LogOnInfo 屬性來擷取 TableLogonInfo 執行個體。

    Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
    
    TableLogOnInfo tableLogonInfo = table.LogOnInfo;
    
  2. 在 foreach 迴圈中,將 TableLogonInfo 的 ConnectionInfo 屬性設為 ConnectionInfo 參數。

    myTableLogonInfo.ConnectionInfo = myConnectionInfo
    
    tableLogonInfo.ConnectionInfo = connectionInfo;
    
  3. 在 foreach 迴圈中,將 TableLogonInfo 執行個體當做參數傳遞到 Table 執行個體的 ApplyLogonInfo 方法。

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

此步驟程序已建立一個可以設定資料庫登入的方法。但是,您必須修改 ConfigureCrystalReports() 方法來處理這個方法,讓報表能夠知道此方法包含資料庫登入資訊。

修改 ConfigureCrystalReports() 方法需要兩個動作:

  • 設定 ConnectionInfo 執行個體。
  • 呼叫 SetDBLogonForReport() 方法。

若要修改 ConfigureCrystalReports() 方法以處理資料庫登入程式碼

  1. 在 ConfigureCrystalReports() 方法中,在繫結報表到 CrystalReportViewer 控制項的程式行上方加入幾個分行符號。

  2. 在分行符號中,宣告並產生 ConnectionInfo 類別的執行個體。

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\36bhtx7w.alert_note(zh-tw,VS.90).gif" alt="Note" class="note" />附註</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>若要能夠存取 ConnectionInfo 類別,請將 &quot;Imports&quot; [Visual Basic] 或 &quot;using&quot; [C#] 陳述式放在 CrystalDecisions.Shared 命名空間的程式碼後置類別上方。(您曾在<a href="ms227453(v=vs.90).md">「專案設定」</a>中加入這個宣告)。</p></td>
</tr>
</tbody>
</table>

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

``` csharp
ConnectionInfo connectionInfo = new ConnectionInfo();
```
  1. 設定 ConnectionInfo 執行個體的 DatabaseName 及 IntegratedSecurity 屬性。

    myConnectionInfo.DatabaseName = "Northwind"
    myConnectionInfo.IntegratedSecurity = True
    
    connectionInfo.DatabaseName = "Northwind";
    connectionInfo.IntegratedSecurity = true;
    
  2. 藉著傳入 ConnectionInfo 執行個體和 NorthwindCustomers 報表,呼叫 SetDBLogonForReport() 方法。

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

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

此程式行後便是將報表繫結到 CrystalReportViewer 控制項的原始程式碼。

您現在已經可以建置及執行您的專案。報表應能正確載入,因為您已加入登入資料庫的程式碼。

若要測試 NorthwindCustomers 報表的載入

  1. 從 [建置] 功能表選取 [建置方案]。

  2. 如果發生任何建置錯誤,請立即修正。

  3. 從 [偵錯] 功能表中,按一下 [啟動]。

NorthwindCustomers 報表會順利顯示。
  1. 返回 Visual Studio,再按一下 [停止] 退出偵錯模式。

在下一節中,您會學習如何在執行階段變更資料庫位置。