1、水晶报表的使用经验和资料总结资料:Asp.Net 中使用水晶报表(上) 2002-9-6 DotNet 吧HTML在我们对 VS.Net 中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的 Web 应用有着非常的好奇心。一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的 A 程序中,并得到了一些小决窍。 这篇文章教你如何在.Net Web 应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的效果,读者最好需要有一些基础的 Asp.Net 访问数据库的知识以及使用 VS.Net 的开发经验
2、。 简介 水晶报表可以由很多的方法得到,其中一个就是使用 VS.Net 来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。如果你正在使用 VS.Net 开发.Net 程序,那么你就不需要再安装其它软件了,因为他已经内嵌在 VS.Net 中了。 优点: VS.Net 水晶报表有下面一些主要的优点: 快速的报表开发 能够导出成为复杂的交互性图表 可以与其它控件一起在 WebForm 中使用 能够动态地将报表导出成为.pdf,.doc,xls,html,rtf 等多种格式 结构: 一些组件组成了水晶报表的二层结构,需要的 Web 应用有: 客户端 : 客户端仅需要一个可以访问嵌入 as
3、px 页面报表的游览器就可以了 服务器 : - 水晶报表引擎(Crystal Report Engine (CREngine.dll)) 通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。也正是因为报告引擎的作用,才可以将 Asp.Net 中的水晶报表转换成为普通 HTML 格式 - 水晶报表设计器(Crystal Report Designer (CRDesigner.dll)) 水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。 - .rpt 报表文件 执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了
4、一些现成的.rpt 例子。 - Data Source .rpt 文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装 DataSet,然后再将其传送到报表文件。 - 水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll))水晶报表查看控件是一个 WebForm 控件,可以将它看成是一个在.aspx 页面中存放报表的容器。 注意:在一些复杂的操作中,报表服务器与 Web 服务器可能不在同一物理主机上,Web 服务器将 HTTP 请求传送到报表服务器上去。
5、水晶报表也可以当做 WebService来执行。 执行模式 水晶报表取数据可以使用下面的方法实现: - Pull 模式 : 被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。 - Push 模式 : 此时开发表不得不自己编写代码连接数据并组装 DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。 报表类型: 水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象。 - Strongly-typed 报表 : 当你将报表文件加入到项目中去时,它就变成了一个了“ strongly-typed“报表。在这些情况下,你
6、将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。 - Un-Typed 报表 : 这里的报表并不直接包含在项目中,因此称为un-typed 报表。在这种情况下,你不得不使用水晶报表的”ReportDocuemt “对象建立一个实例,并且 ”手动“地凋用报表。 其它注意事项 - 尽管水晶报表查看器拥有一些很酷的功能,如缩放、页面导航等。但是他不提供打印功能,你不得不调用游览器的打印功能。 - VS.Net 中的水晶报表如果没有注册,那么它只能使用 30 次,30 次后, ”保存“功能就不能再使用了。为了避免这个,你不是不在 http:/ (好像不是这样子的,不注册也好像能用
7、很长的时间,只是不能提供支持) - 让我们感受一下在 A 中使用一个现成的水晶报表文件1) 从 WebForm 工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至.aspx 页面中。2) 调出水晶报表查看器控件的属性窗口 3) 点击.按钮查看“Data Binding“属性,并弹出了 DataBinding 窗口。4) 从左边的“Bindable 属性”区中选择“Report Source”5) 选中“自定义绑定表达式“单选按钮,在右边的底部的窗口中指定.rpt 文件的文件名和路径,例如:“C:Program FilesMicrosoft Visual Studio
8、.NETCrystal ReportsSamplesReportsGeneral BusinessWorld Sales Report.rpt“,然后”确定“注意:文件”World Sales Report.rpt“文件是在 VS.Net 安装时创建的。如果你在安装过程中指定了其它目录,此时你最好确认一下路径的正确性。 上面的步骤中实际上是插入了下面这些代码至 Asp.Net 文件中 :以及:id=“CrystalReportViewer1“runat=“server“ Width=“350px“ Height=“50px“ ReportSource=注意:在飞刀我的 VS.Net 正式版中自
9、动生成的代码中 ReportSource 产生的样式不是这样子的,它是:ReportSource=“ 这样是错误的,会出现错误信息,有两处错误: 必须按照使用本文介绍的格式来手动修改,这也算是 VS.Net 的一个 Bug 吧。 6) 在 Page_Load 方法中调用 DataBind 方法。 (代码为 VB.Net) Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) DataBind() End Sub 7)保存并编译你的页面。 现在,你就有一个内嵌水晶报表的 WebForm
10、页面了。 注意:实际开发中,一开始会出现无法访问 inetsrv 目录的错误,解决的办法是改变其目录的安全属性,使 User 用户有可写的权限。飞刀我发现 .Net 系统自已给出的解决方法是没有用的,也可能是我使用的是 Windows.Net 操作系统的原因。 Asp.Net 中使用水晶报表(中)HTML使用 Pull 模式我们将通过下面的这些步骤来通过 Pull 模式来执行水晶报表 1.首先创建 rpt 文件,并使用水晶报表设计接口设置一些必须的数据连接。 2.拖放一个 CrystalReportViewer 控件至 aspx 页面,设置它的属性指定我们上一步创建的.rpt 文件。 3. 在
11、代码中调用 DataBind 方法。创建 .rpt 文件:1) 在右击”解决方案游览器 “,在弹出的菜单中选择”添加“”添加新项“”Crystal Report” 2) 在”Crystal Report 库”中选择”作为空白报表“单选按钮,最后单击“确定“。 3)这里将弹出水晶报表设计器。 4) 右击报表中的”详细资料区 ”,选择“数据库” “添加/删除数据库.“5) 在弹出的 ”数据库专家 “中,扩展”OLE DB(ADO)“选项,此时会弹出另外一个”OLE DB(ADO)“窗口。6) 在 “OLE DB (ADO)“ 弹出窗口中,选择 “Microsoft OLE DB Provider
12、for SQL Server“ 然后 “Next“7) 指定连接的信息服务器 : ASPCN (您的机器是什么名字就写什么) 用户 ID: sa密码:数据库 : Pubs8) 单击”Next“,最后单击”Finish “按钮。9) 这时你就能在”数据库专家 “窗口中看到我们选择的数据库。10) 扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK“按钮。11) 现在在”字段资源浏览器(单击“视图”菜单,指向“其他窗口”,然后单击“文档大纲”。) “中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。12) 拖放需要的字段进入报表的”详细资料
13、“区。字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。13) 保存,这样我们就有了一个水晶报表文件。创建 CrystalReportViewer 控件14) 回到前面的 WebForm 中,拖放一个 Crystal Report Viewer 控件到页面中去。15) 调出 Crystal Report Viewer 控件的属性窗口,选择“DataBindings“区点击.16) ”Crystal Report Viewer 数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑
14、定表达式”中指定.rpt 文件路径。 17) 此时你能够从 Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览。注意:在上面的例子中,CrystalReportViewer 可以在设计时直接调用真实的数据,因为此时数据已经保存。在这种情况下,设计时当没有保存数据时,他是不能显示数据的。取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。Code Behind 程序设计18) 在 Page_Load 方法中调用 DataBind 方法。执行你的程序 19) 创建并运行你的程序! 您现在就可以直接在 Web 页面中使用水晶报表内置的一些功能,如页
15、面导航,缩放等。 /HTML Asp.Net 中使用水晶报表(下) 2002-9-6 DotNet 吧HTML我们采用下面的几步使用 Push 模式执行水晶报表:1. 设计一个 DataSet2. 创建一个.rpt 文件同时将其指定给上一步建立的 DataSet。3. 在 aspx 页面中拖放一个 CrystalReportViewer 控件同时将其与前面的 rpt 文件建立联系。4. 在代码中访问数据库并把数据存入 DataSet5. 调用 DataBind 方法。设计一个 DataSet1) 右击“解决方案浏览器” ,选择 “添加”- “添加新项”“数据集”2) 从“服务器资源管理器” 中
16、的“SQL Server”中拖放“Stores”表(位于 PUBS 数据库中) 。3) 此时在数据集中就会有一个 Stores 表的结构图。- .xsd 文件中仅仅包含一个结构图,但是不会有任何数据在里面。创建 .rpt 文件 :4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。5)建立.rpt 文件之后,右击 “详细资料”“添加删除数据库“6) 在” 数据库专家 “窗口中,展开 ”项目数据“(代替以前的 OleDb) ,展开“ADO.Net数据集”-“DataSet1“,选择”Stores“表。7) 将”Stores“ 表添加到“选定的表 ”中,点击“
17、OK”8) 使用 PULL 模式下的方法,建立一个 WebForm建立一个 Crystal Report Viewer 控件9) 建立一个 Crystal Report Viewer 控件,并设定其属性,此处与 PULL 模式下是一致的。Code Behind 代码 :10) 在 Page_Load 方法中使用下面的子函数:VB.Net 代码:Sub BindReport()Dim myConnection As New SqlClient.SqlConnection() myConnection.ConnectionString= “server= (local)NetSDK;databas
18、e=pubs;Trusted_Connection=yes“Dim MyCommand As New SqlClient.SqlCommand()MyCommand.Connection = myConnectionMyCommand.CommandText = “Select * from Stores“MyCommand.CommandType = CommandType.TextDim MyDA As New SqlClient.SqlDataAdapter()MyDA.SelectCommand = MyCommandDim myDS As New Dataset1()这就是我们在设计
19、模式上使用的 DataSet MyDA.Fill(myDS, “Stores“) 你不得不使用与你前面 DataSet 相同名字。Dim oRpt As New CrystalReport1() 水晶报表绑定oRpt.SetDataSource(myDS) 设定水晶报表的 ReportSourceCrystalReportViewer1.ReportSource = oRptEnd SubC#代码:private void BindReport()string strProvider = “Server=(local);DataBase=pubs;UID=sa;PWD=“;CrystalRep
20、ort1 oCR = new CrystalReport1();Dataset1 ds = new Dataset1();SqlConnection MyConn = new SqlConnection(strProvider);MyConn.Open();string strSel = “Select * from Stores“;SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);MyAdapter.Fill(ds,“stores“);oCR.SetDataSource(ds);this.CrystalReportVie
21、wer1.ReportSource = oCR;注意:在上面的代码中,你得注意一下 oRpt 是“Strongly Typed“的报表文件。如果你需要使用“UnTyped“报表,你得使用 ReportDocument 对象,然后再调用报表文件。运行你的程序。 11) 运行你的程序将报表文件导出成为其它格式你能够将报表文件导出成为下列格式:1. PDF (Portable Document Format) 1. 2. DOC (MS Word Document) 2. 3. XLS (MS Excel Spreadsheet) 3. 4. HTML (Hyper Text Markup Lang
22、uage 3.2 or 4.0 compliant) 4. 5. RTF (Rich Text Format) 使用 Pull 模式导出报表当导出使用 Pull 模式创建的文件时,水晶报表准确地打开所需要的数据,下面是执行导出功能的代码:C#代码:VB.Net 代码:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim myReport As CrystalReport1 = New CrystalReport1()注意:这里我
23、们建立一个 strong-typed 的水晶报表实例。Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()myReport.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile 导出成为其它文件时也需要这个选项 如 Microsoft Exchange, MAPI 等.
24、 myReport.ExportOptions.ExportFormatType = CrystalDecisions. Shared.ExportFormatType.PortableDocFormat这里我们导出成为.pdf 格式文件,你也能选择上面的其它类型文件DiskOpts.DiskFileName = “c:Output.pdf“如果你不指定确切的目录,那么文件就会保存到WindowsSystem32 目录中去了myReport.ExportOptions.DestinationOptions = DiskOpts水晶报表文件不包含直接的 FileName 属性,因此你不能直接指定
25、保存的文件名所以你不得不使用 DiskFileDestinationOptions 对象,设置它的 DiskFileName 属性为你想要的路径,最后将水晶报表的 DestinationsOptions 属性指定为上面的DiskFileDestinationOptionmyReport.Export()上面的代码将完成导出工作。End Sub使用 PUSH 模式导出水晶报表当导出的报表是由 PUSH 模式建立的时,第一步就是通过编程建立连接并组装 DataSet,设置报表的的 SetDataSource 属性。再下面的步骤就有 Pull 模式一样的了。/HTML.NET 环境下水晶报表使用总结
26、水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。一、在使用自带的水晶报表时,请注册,否则只能使用 30 次水晶报表注册码注册号:6707437608密码:AAP5GKS0000GDE100DS二、使用 CrystalReportViewer 进行预览CrystalReportViewer 控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的
27、路径,也可以是强类型报表。1. 打开“工具箱” ,并将一个 CrystalReportViewer 拖到窗体上,我们命名为rptVew。 2. 通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。3. 当运行应用程序时,报表将显示在查看器中。三、创建新报表1. 指向“添加” ,单击“添加新项” 。 2. 在“添加新项”对话框中,从“模板”区域选择 Crystal Report,将报表命名为rptClient,单击 “打开” 。 3. 在 Crystal Report 库中,选择下列选项之一: 使用报表专家 指导您完成报表的创建过程,并将您的选择添加到 Crystal
28、 Report Designer。 作为空白报表 打开 Crystal Report Designer。 来自于现有的报表 创建新报表,它与指定的另一报表设计相同。 注意 Crystal Report 库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方法适合您的需要。4. 单击“确定”按钮。 如果选择使用“报表专家” ,便会出现“报表专家”对话框,并带有数据资源管理器。为每个文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,然后单击“完成”来访问 Crystal Report Designer 和您的报表四、是否需要动态设置
29、数据源?Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。 拉和推模型为了向开发人员提供最灵活的数据访问方法,Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。 拉模型在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。推模型相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL
30、 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。 四、从 ADO.NET 数据集制作报表从数据库创建数据集对象 1. 在项目中新建一个架构文件: a. 在解决方案资源管理器中,右击项目名,指向“添加” ,然后单击“添加新项” 。 b. 在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据” 。 c. 在“模板”区域选择“数据集” 。 d. 接受默认名称 Dataset1.xsd。 这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成
31、强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。 2. 指定数据库位置: a. 在服务器资源管理器中,右击“数据连接”并选择“添加连接” 。 b. 在“ 数据链接属性 ”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server) 。 c. 单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。 d. 单击“确定”按钮。 此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。 3. 在解决方案资源管理器中,双击 Dataset1.xsd (如果它
32、尚不是活动视图) 。 Dataset1.xsd 现在应显示在“数据集”选项卡中。 4. 若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。 5. 单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。 6. 在“生成”菜单上,单击“生成”为项目生成数据集对象。 ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。 请在使用“报表专家”创建新报表时调用“数据库专家”
33、 。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家” ,请在 Report Designer 中右击,指向“数据库” ,然后单击“添加/删除数据库 ”。将报表连接到 ADO.NET 数据集对象 1. 在“数据库专家”中,展开“项目数据”文件夹。 2. 展开“ADO.NET 数据集”文件夹。 3. 选择所需数据集对象。 例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1 ”。 4. 选择要向报表中添加的表,和使用其他数据源一样。