CrystalReportViewer 控件的使用方法

时间:2024-03-08 21:30:13

  在使用CrystalReportViewer 对象模型登录到安全的SQL Server数据库时,必须使用 CrystalDecisions.Shared命名空间中的类。

  ConnectionInfo类的属性可用来连接到数据库服务器或ODBC数据源。在本教程中,将设置ServerName,DatabaseName,UserID以及Password属性。如果选择仅设置DatabaseName,UserID和Password属性,则会登录到报表指定的数据库的默认服务器。但如果选择指一个备用的serverName属性,则可以在运行时将报表重定向到其它服务器。

  从CrystalReportViewer控件的LogOnInfo属性获取TableLogOnInfos实例。然后,将ConnectionInfo实例赋给TableLogOnInfos实例的每个TableLogOnInfo对象。

以下用四步来创建报表:

  1.创建连接到安全的SQL Server数据库的报表。

  在“解决方案资源管理器”中,右击粗体显示的项目名,指向“添加”,然后单击“添加新项”。 在“添加新项”对话框的“模板”视图中,选择“Crystal Report”模板。 在“名称”字段中,输入名称“NorthwindCustomers.rpt”,然后单击“打开”。 在“Crystal Reports 库”对话框的“创建新 Crystal Report 文档”面板中,选择“使用报表向导”。 在“选择专家”面板中,选择“标准”后,单击“确定”。出现“标准报表创建向导”窗口。 在“可用数据源”面板中,展开“创建新连接”文件夹。 从打开的子文件夹中,展开“OLE DB (ADO)”文件夹。出现“OLE DB (ADO)”窗口。 选择“Microsoft OLE DB Provider for SQL Server”并单击“下一步”。 分别将数据库服务器、用户 ID 和密码的值输入到“服务器”、“用户 ID”和“密码”字段中。 从“数据库”下拉列表中,选择“Northwind”。取消选中“集成安全性”复选框,因为您使用的是 SQL Server 身份验证而不是 NT 身份验证。 单击“完成”。OLE DB 文件夹将展开,显示数据库服务器及其中的 Northwind 数据库。 展开“Northwind”、“dbo”和“表”节点,然后选择“Customers”表。 单击“>”符号,将该表移入“选定的表”面板,然后单击“下一步”。 展开“Customers”表,按住 Ctrl 键的同时单击“公司名称”、“联系人姓名”和“城市”。 单击“>”符号,将这些字段移至“要显示的字段”面板,然后单击“下一步”。 在“可用字段”面板的“报表字段”下,选择“客户.城市”,然后单击“>”符号将该字段移入“分组依据”面板,再单击“完成”。NorthwindCustomers 报表创建完毕,并加载到 Visual Studio 的主窗口中。 

  2.绑定不带登录代码的报表。

  打开 Web 或 Windows 窗体。 从“视图”菜单中,单击“代码”。 找到在 “项目设置”中创建的 ConfigureCrystalReports() 方法。 声明一个字符串变量,将其命名为“reportPath”,然后将一个本地报表的运行时路径赋值给它。对于网站项目和 Windows 项目,确定此路径时会有所不同:对于网站,要将本地报表文件的名称作为字符串参数传递到 Server.MapPath() 方法中。这样,在运行时本地报表就会映射到硬盘文件目录路径。  C# Copy Code string reportPath = Server.MapPath("NorthwindCustomers.rpt");
对于 Windows 项目,要将 Application.StartupPath 属性与一个反斜杠和本地报表文件名称连接起来。这样,报表将映射到与 Windows 可执行文件相同的目录。 
注意  编译时,需要将报表复制到可执行文件所在的目录。  C# Copy Code string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt";
将 NorthwindCustomers 报表的文件目录路径赋给 CrystalReportViewer 控件的 ReportSource 属性。C# Copy Code crystalReportViewer.ReportSource = reportPath;测试 NorthwindCustomers 报表的加载过程。现在即可生成并运行项目。预计报表加载将失败,因为此时尚未编写数据库登录代码。从“生成”菜单中选择“生成解决方案”。 如果生成过程中出错,请立即纠正。 如果在 Windows 项目中使用非嵌入式报表,请在 \bin\debug\ 子目录中找到编译后的 Windows 可执行文件,然后将报表复制到该子目录中。注意  要让 Windows 可执行文件在运行时加载非嵌入式报表,该报表必须与 Windows 可执行文件存储在同一个目录中。从“调试”菜单中,单击“开始”。NorthwindCustomers 报表并不显示。它会在添加数据库登录代码后显示。注意  结果可能会因为所使用的 Crystal Reports 版本不同而不同。例如,如果安装了 Crystal Reports 10 和更高版本,则会提示您输入该报表的数据库登录信息。如果运行的是较早版本的 Crystal Reports,则会引发异常。不论是哪种情况,都需要依照以下过程来创建功能完整的应用程序。返回到 Visual Studio,然后单击“停止”从调试模式中退出。 

  3.添加报表登录代码。

  返回到此 Web 或 Windows 窗体的代码隐藏类。 在类的底部,创建名为 SetDBLogonForReport() 的新私有帮助器方法,并将 ConnectionInfo 传递给方法签名。 C# Copy Code private void SetDBLogonForReport(ConnectionInfo connectionInfo){}在此方法内,从 CrystalReportViewer 类的 LogOnInfo 属性获取 TableLogOnInfos 实例。注意  TableLogOnInfos 是包含 TableLogOnInfo 类实例的索引类。  C# Copy Code TableLogOnInfos tableLogOnInfos = crystalReportViewer.LogOnInfo;创建一个 foreach 循环,它在 TableLogOnInfos 索引类实例的各个 TableLogOnInfo 实例间循环。C# Copy Code foreach(TableLogOnInfo tableLogOnInfo in tableLogOnInfos){}在 foreach 循环中,将 TableLogOnInfo 的 ConnectionInfo 属性设置为 ConnectionInfo 参数。C# Copy Code tableLogOnInfo.ConnectionInfo = connectionInfo;修改 ConfigureCrystalReports() 方法以处理数据库登录代码。此过程创建了用于设置数据库登录的方法。但是,必须修改 ConfigureCrystalReports() 方法以处理此方法,这样报表才能识别出其中含有数据库登录信息。 
修改 ConfigureCrystalReports() 方法需要两个步骤: 配置 ConnectionInfo 实例。 调用 SetDBLogonForReport() 方法。 在 ConfigureCrystalReports() 方法中,在将报表绑定到 CrystalReportViewer 控件的代码之下声明并实例化 ConnectionInfo 类。C# Copy Code ConnectionInfo connectionInfo = new ConnectionInfo();在下一行上,通过传入 ConnectionInfo 实例调用 SetDBLogonForReport() 方法。 C# Copy Code SetDBLogonForReport(connectionInfo);设置 ConnectionInfo 实例的 DatabaseName、UserID 和 Password 属性。注意  出于安全性考虑,使用访问权限受到限制的数据库帐户非常重要。有关更多信息,请参见 “安全性:创建受限访问数据库帐户”。 在编写的代码中,用自己的密码代替示例密码 654321(如下所示)。  C# Copy Code connectionInfo.DatabaseName = "Northwind";connectionInfo.UserID = "limitedPermissionAccount";connectionInfo.Password = "654321";测试 NorthwindCustomers 报表的加载过程。现在即可生成并运行项目。由于已经添加了登录数据库的代码,现在应该能够正确加载报表了。 从“生成”菜单中选择“生成解决方案”。 如果生成过程中出错,请立即纠正。 从“调试”菜单中,单击“开始”。NorthwindCustomers 报表将成功显示。 
返回到 Visual Studio,然后单击“停止”从调试模式中退出。 

  4.添加在运行进更改数据库位置的功能。

  在本节中,将学习如何在运行时更改数据库的位置。要实现此功能只需对 ConnectionInfo 实例稍加修改即可。注意  在本教程中,将更改数据库服务器的名称,而不是数据库的名称。无法使用 CrystalReportViewer 控件更改数据库的名称。在运行时更改数据库位置。在 ConfigureCrystalReports() 方法中,在调用 SetDBLogonForReport() 方法的代码后面创建几行。 在这几行中,设置 ConnectionInfo 实例的 ServerName 属性。注意  在编写的代码中,用您的服务器名称代替示例服务器名称“DevDatabaseServer”(如下所示)。  C# Copy Code connectionInfo.ServerName = "DevDatabaseServer"; 测试是否能在运行时将报表重置到备用数据库服务器。现在即可生成并运行项目。报表应该会在运行时重定向到备用数据库服务器。从“生成”菜单中选择“生成解决方案”。 如果生成过程中出错,请立即纠正。 从“调试”菜单中,单击“开始”。NorthwindCustomers 报表将成功显示。返回到 Visual Studio,然后单击“停止”从调试模式中退出。