添加报表登录代码
现在即可向代码隐藏类添加登录代码。首先,创建一个私有帮助器方法 SetDBLogonForReport()。
创建 SetDBLogonForReport() 方法并编写该方法的代码
返回到此 Web 或 Windows 窗体的代码隐藏类。
在类的底部创建名为 SetDBLogonForReport() 的新私有方法,它有两个参数 ConnectionInfo 和 ReportDocument。
``` vb
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)
End Sub
```
``` csharp
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
}
```
- 在此方法中,从 ReportDocument 参数的 Database 属性的 Tables 属性获取 Tables 实例。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,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;
```
- 创建一个 foreach 循环,它在 Tables 索引类实例的各个 Table 实例间循环。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,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)
{
}
```
在 foreach 循环中,从 Table 实例的 LogOnInfo 属性获取 TableLogonInfo 实例。
Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
在 foreach 循环中,将 TableLogonInfo 的 ConnectionInfo 属性设置为 ConnectionInfo 参数。
myTableLogonInfo.ConnectionInfo = myConnectionInfo
tableLogonInfo.ConnectionInfo = connectionInfo;
在 foreach 循环中,将 TableLogonInfo 实例作为参数传递给 Table 实例的 ApplyLogonInfo 方法。
myTable.ApplyLogOnInfo(myTableLogonInfo)
table.ApplyLogOnInfo(tableLogonInfo);
此过程创建了用于设置数据库登录的方法。但是,必须修改 ConfigureCrystalReports() 方法以处理此方法,这样报表才能识别出其中含有数据库登录信息。
修改 ConfigureCrystalReports() 方法需要两个步骤:
- 配置 ConnectionInfo 实例。
- 调用 SetDBLogonForReport() 方法。
修改 ConfigureCrystalReports() 方法以处理数据库登录代码
在 ConfigureCrystalReports() 方法中,在用于将报表绑定到 CrystalReportViewer 控件的代码行之前创建几行。
在这几行中,声明并实例化 ConnectionInfo 类。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>要使 ConnectionInfo 类可访问,必须在代码隐藏类的顶部包含 "Imports" [Visual Basic] 或 "using" [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();
```
- 设置 ConnectionInfo 实例的 DatabaseName、UserID 和 Password 属性。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>出于安全性考虑,使用访问权限受到限制的数据库帐户非常重要。有关更多信息,请参见<a href="ms227498(v=vs.90).md">“安全性:创建受限访问数据库帐户”</a>。</p></td>
</tr>
</tbody>
</table>
在编写的代码中,用自己的密码代替示例密码 1234(如下所示)。
``` vb
myConnectionInfo.DatabaseName = "Northwind"
myConnectionInfo.UserID = "limitedPermissionAccount"
myConnectionInfo.Password = "
1234"
```
``` csharp
connectionInfo.DatabaseName = "Northwind";
connectionInfo.UserID = "limitedPermissionAccount";
connectionInfo.Password = "
1234";
```
- 通过传递 ConnectionInfo 实例和 NorthwindCustomers 报表,输入对 SetDBLogonForReport() 方法的调用。
``` vb
SetDBLogonForReport(myConnectionInfo, northwindCustomersReport)
```
``` csharp
SetDBLogonForReport(connectionInfo, northwindCustomersReport);
```
这些代码之后即是将报表绑定到 CrystalReportViewer 控件的原始代码。
现在即可生成并运行项目。由于已经添加了登录数据库的代码,现在应该能够正确加载报表了。
测试 NorthwindCustomers 报表的加载过程
从“生成”菜单中选择“生成解决方案”。
如果生成过程中出错,请立即纠正。
从“调试”菜单中,单击“开始”。
NorthwindCustomers 报表将成功显示。
- 返回到 Visual Studio,然后单击“停止”从调试模式中退出。
NorthwindCustomers 报表将成功显示。