




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Asp.Net中使用水晶报表(上)出自在我们对VS.Net中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心。一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的A程序中,并得到了一些小决窍。 这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。 简介 水晶报表可以由很多的方法得到,其中一个就是使用VS.Net来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。如果你正在使用VS.Net开发.Net程序,那么你就不需要再安装其它软件了,因为他已经内嵌在VS.Net中了。 优点: VS.Net水晶报表有下面一些主要的优点: 快速的报表开发 能够导出成为复杂的交互性图表 可以与其它控件一起在WebForm中使用 能够动态地将报表导出成为.pdf,.doc,xls,html,rtf等多种格式 结构: 一些组件组成了水晶报表的二层结构,需要的Web应用有: 客户端 : 客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了 服务器 : 水晶报表引擎(Crystal Report Engine (CREngine.dll)) 通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。也正是因为报告引擎的作用,才可以将Asp.Net中的水晶报表转换成为普通HTML格式 水晶报表设计器(Crystal Report Designer (CRDesigner.dll)) 水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。 .rpt报表文件 执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了一些现成的.rpt例子。 Data Source .rpt文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet,然后再将其传送到报表文件。 水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll)) 水晶报表查看控件是一个WebForm控件,可以将它看成是一个在.aspx页面中存放报表的容器。 注意:在一些复杂的操作中,报表服务器与Web服务器可能不在同一物理主机上,Web服务器将HTTP请求传送到报表服务器上去。水晶报表也可以当做WebService来执行。 执行模式 水晶报表取数据可以使用下面的方法实现: Pull 模式: 被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。 Push 模式 : 此时开发表不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。 报表类型: 水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象。 Strongly-typed 报表 : 当你将报表文件加入到项目中去时,它就变成了一个了“ strongly-typed“报表。在这些情况下,你将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。 Un-Typed 报表 : 这里的报表并不直接包含在项目中,因此称为un-typed 报表。在这种情况下,你不得不使用水晶报表的”ReportDocuemt“对象建立一个实例,并且”手动“地凋用报表。 其它注意事项 尽管水晶报表查看器拥有一些很酷的功能,如缩放、页面导航等。但是他不提供打印功能,你不得不调用游览器的打印功能。 VS.Net中的水晶报表如果没有注册,那么它只能使用30次,30次后,”保存“功能就不能再使用了。为了避免这个,你不是不在 /这里注册此产品。 (好像不是这样子的,不注册也好像能用很长的时间,只是不能提供支持) 默认安装的水晶报表只能支持5个用户,为了支持更多的用户,你不得不在 /中购买许可证。 让我们感受一下在A中使用一个现成的水晶报表文件 让我们先感受一下在WebForm中使用水晶报表的感觉。 1) 从WebForm工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至.aspx页面中。 2) 调出水晶报表查看器控件的属性窗口 3) 点击.按钮查看Data Binding属性,并弹出了DataBinding窗口。4) 从左边的Bindable属性”区中选择“Report Source”5) 选中自定义绑定表达式单选按钮,在右边的底部的窗口中指定.rpt文件的文件名和路径,例如:C:Program FilesMicrosoft Visual Studio.NETCrystal ReportsSamplesReportsGeneral BusinessWorld Sales Report.rpt,然后”确定“ 注意:文件”World Sales Report.rpt“文件是在VS.Net安装时创建的。如果你在安装过程中指定了其它目录,此时你最好确认一下路径的正确性。 上面的步骤中实际上是插入了下面这些代码至Asp.Net文件中: % Register TagPrefix=cr Namespace=CrystalDecisions.Web Assembly=CrystalDecisions.Web %以及: CR:CRYSTALREPORTVIEWER id=CrystalReportViewer1 runat=server Width=350px Height=50px ReportSource= %# C:Program FilesMicrosoft Visual Studio.NETCrystal ReportsSamplesReportsGeneral BusinessWorld Sales Report.rpt % /CR:CRYSTALREPORTVIEWER 注意:在飞刀我的VS.Net正式版中自动生成的代码中ReportSource产生的样式不是这样子的,它是: ReportSource= %# C:xxxxxxxx.rpt % 这样是错误的,会出现错误信息,有两处错误: DataBind中要有双引号,因此外部只能用单引号 目录分隔符号不能使用,必须使用 必须按照使用本文介绍的格式来手动修改,这也算是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页面了。 注意:实际开发中,一开始会出现无法访问inetsrv目录的错误,解决的办法是改变其目录的安全属性,使User用户有可写的权限。飞刀我发现.Net系统自已给出的解决方法是没有用的,也可能是我使用的是Windows.Net操作系统的原因。 Asp.Net中使用水晶报表(中)使用Pull模式 我们将通过下面的这些步骤来通过Pull模式来执行水晶报表 1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。 2.拖放一个 CrystalReportViewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。 3. 在代码中调用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 for SQL Server 然后 Next7) 指定连接的信息服务器 : ASPCN (您的机器是什么名字就写什么) 用户 ID: sa密码:数据库 : Pubs8) 单击”Next“,最后单击”Finish“按钮。9) 这时你就能在”数据库专家“窗口中看到我们选择的数据库。10) 扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK按钮。 11) 现在在”字段资源浏览器“中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。12) 拖放需要的字段进入报表的”详细资料“区。字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。13) 保存,这样我们就有了一个水晶报表文件。创建 CrystalReportViewer 控件14) 回到前面的WebForm中,拖放一个Crystal Report Viewer控件到页面中去。15) 调出Crystal Report Viewer控件的属性窗口,选择“DataBindings区点击.16) ”Crystal Report Viewer 数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑定表达式”中指定.rpt文件路径。 17) 此时你能够从Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览。注意:在上面的例子中,CrystalReportViewer可以在设计时直接调用真实的数据,因为此时数据已经保存。在这种情况下,设计时当没有保存数据时,他是不能显示数据的。取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。Code Behind 程序设计18) 在Page_Load方法中调用DataBind方法。执行你的程序 19) 创建并运行你的程序! 您现在就可以直接在Web页面中使用水晶报表内置的一些功能,如页面导航,缩放等。Asp.Net中使用水晶报表(下)使用PUSH模式 我们采用下面的几步使用Push模式执行水晶报表:1. 设计一个DataSet2. 创建一个.rpt文件同时将其指定给上一步建立的DataSet。3. 在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系。4. 在代码中访问数据库并把数据存入DataSet5. 调用DataBind方法。设计一个DataSet1) 右击“解决方案浏览器”,选择“添加”-“添加新项”-“数据集”2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。3) 此时在数据集中就会有一个Stores表的结构图。- .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。创建 .rpt 文件 :4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。5)建立.rpt文件之后,右击“详细资料”-添加删除数据库“6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”-DataSet1“,选择”Stores“表。7) 将”Stores表添加到“选定的表”中,点击“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;database=pubs;Trusted_Connection=yesDim MyCommand As New SqlClient.SqlCommand()MyCommand.Connection = myConnectionMyCommand.CommandText = Select * from StoresMyCommand.CommandType = CommandType.TextDim MyDA As New SqlClient.SqlDataAdapter()MyDA.SelectCommand = MyCommandDim myDS As New Dataset1()这就是我们在设计模式上使用的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=;CrystalReport1 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.CrystalReportViewer1.ReportSource = oCR;注意:在上面的代码中,你得注意一下oRpt是Strongly Typed的报表文件。如果你需要使用UnTyped报表,你得使用ReportDocument对象,然后再调用报表文件。运行你的程序。 11) 运行你的程序将报表文件导出成为其它格式你能够将报表文件导出成为下列格式:1. PDF (Portable Document Format) 2. DOC (MS Word Document) 3. XLS (MS Excel Spreadsheet) 4. HTML (Hyper Text Markup Language 3.2 or 4.0 compliant) 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()注意:这里我们建立一个strong-typed的水晶报表实例。Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()myReport.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile 导出成为其它文件时也需要这个选项 如Microsoft Exchange, MAPI等. myReport.ExportOptions.ExportFormatType = CrystalDecisions. Shared.ExportFormatType.PortableDocFormat这里我们导出成为.pdf格式文件,你也能选择上面的其它类型文件DiskOpts.DiskFileName = c:Output.pdf如果你不指定确切的目录,那么文件就会保存到WindowsSystem32目录中去了myReport.ExportOptions.DestinationOptions = DiskOpts水晶报表文件不包含直接的FileName属性,因此你不能直接指定保存的文件名所以你不得不使用DiskFileDestinationOptions对象,设置它的DiskFileName属性为你想要的路径,最后将水晶报表的DestinationsOptions属性指定为上面的DiskFileDestinationOptionmyReport.Export()上面的代码将完成导出工作。End Sub使用PUSH模式导出水晶报表当导出的报表是由PUSH模式建立的时,第一步就是通过编程建立连接并组装DataSet,设置报表的的SetDataSource属性。再下面的步骤就有Pull模式一样的了。补充说明文件大家在基于webform中使用水晶报表时如果简单的按照网上“阿刀”的做法,肯定会提示你:登陆失败。对于这个问题,斑竹我花了整整一天的时间研究水晶报表的帮助文件,终于得到解决方案。我不是一个保守的人,我相信有很多的网友正和我一样在花费精力在研究这个问题,我不愿意大家再和我一样白白的花费精力。下面是我实现该方案的几个步骤。大家不要着急,慢慢的看下去会对你有很大的帮助。步骤一:看示例文件水晶报表自带一个示例文件,数据库是access(不带密码的)。我首先运行示例文件(基于webform和winform)结果显示了正确的报表,正如“飞刀”的示例。于是,我自己建立了一个报表文件和.aspx文件,结果显示登陆失败!可是我把报表文件换成示例的报表文件,不再出错。问题出在什么地方?难道是报表格式文件有关于登陆权限的设置?通过跟踪、调试,我对比分析我的报表文件和示例报表文件,没有发现任何的不同。看来问题不在报表文件。是数据库的问题?我建立一个access结果还是登陆失败!不是数据库的问题(我自己的数据库是未带密码的access,帮助中的数据库也是如此)?也不是报表格式文件的问题(我仔细分析了两者的原代码是相同的)?那么问题出现在什么地方?我白思不得其解!步骤二:找帮助文件于是我再次求助于帮助。我翻遍了水晶报表的帮助,终于找到“ 访问安全数据库 C#”字样,发现这里有下面的一段话:通过 Crystal Reports for Visual Studio .NET 访问安全数据库的过程在 Web 窗体和 Windows 窗体之间有所不同。在 Windows 窗体中,对话框自动提示用户输入用户名和密码(测试很容易成功)。而在 Web 窗体中,您需要设计一个表单以从用户获取该信息。对于这两种情况,均可使用代码来指定用户名和密码,从而为应用程序的所有用户提供相同的安全等级。于是我对同样的数据库(先是用帮助示例中的access数据库,后来用自己建立的access数据库)。发现对于同一个报表文件,对于winform能显示成功,而对于webform则仍然显示登陆失败!于是我有点明白上面的意思!看来问题是出在权限的设置上。 步骤三:研究帮助,终于成功!在帮助里我找到“设置数据库登录参数”字样,里面提供了一些后来发现是非常有用的信息:下列示例说明如何将登录参数传递到报表的表中。该示例使用到某个安全的 SQL Server 数据库的连接。 启动一个新项目 向窗体添加一个“按钮”和四个“文本框”控件。 将“文本框”控件分别命名为:serverNameTxt、dbNameTxt、userNameTxt 和 passwordTxt。 双击“按钮”控件以指定 Click 事件的代码。根据所用语言插入适当的代码。C# / 声明所需变量。TableLogOnInfo logOnInfo = new TableLogOnInfo ();int i = 0;/ 对报表中的每个表依次循环。for (i=0;i = Report.Database.Tables.Count - 1;i+)/ 设置当前表的连接信息。logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text;logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text;logOnInfo.ConnectionInfo.UserID = userNameTxt.Text;logOnInfo.ConnectionInfo.Password = passwordTxt.Text;Report.Database.Tables i.ApplyLogOnInfo (logOnInfo);注意 受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法,但 LogOnInfo.ServerName 和 LogOnInfo.DatabaseName 要保留为空。于是我仿照这个样子,尝试了一下,出错提示:没有发现TableLogOnInfo 和Report。后来我发现TableLogOnInfo 是属于CrystalDecisions.Shared 命名空间的成员。于是我添加引用:using CrystalDecisions.Shared ;这次问题出现在Report。Report?这是个什么东西,我查遍了所有的帮助,并没有这个函数或类!说真的!这个问题难到了我很长的时间!一直在查找Report到底是个什么东西!水景报表公司也真是的,帮助也不写得详细一点!该打!最终我终于发现Report只是一个用户定义的对象,不是系统本身的对象。在我困惑的时候,突然我想,为什么不看看Report后面的DataBase,这是个什么东西,终于问题解决了,在帮助里找到如下信息ReportDocument oRpt = new ReportDocument();Report属于DocumentCrystalDecisions.CrystalReports .Engine 类的成员。修改代码:并添加引用using CrystalDecisions.Shared ;/负责解释TableLogOnInfo类using CrystalDecisions.CrystalReports .Engine ;/负责解释ReportDocument类private void Page_Load(object sender, System.EventArgs e)TableLogOnInfo logOnInfo = new TableLogOnInfo ();/这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表ReportDocument oRpt = new ReportDocument();oRpt.Load(c:inetpubwwwrootexerpageletcrystalcr1.rpt);/修改为你自/己的正确位置/建立安全信息/受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法,但 LogOnInfo.ServerName /和 LogOnInfo.DatabaseName 要保留为空logOnInfo.ConnectionInfo.ServerName = www;logOnInfo.ConnectionInfo.DatabaseName = archives;logOnInfo.ConnectionInfo.UserID = sa;logOnInfo.ConnectionInfo.Password = 123456;oRpt.Database .Tables 0.ApplyLogOnInfo (logOnInfo);/建立.rpt文件与CryStalReportviewer文件之间的连接CrystalReportViewer1.ReportSource = oRpt;报表文件终于出现!哇,我好高兴,禁不住站起来伸了个懒腰!步骤四:最终的完整版的代码上面的代码不具有系统可扩充和灵活性。缺点有二:(1)、数据报表格式文件是采用绝对路径(2)、数据库访问权限的设置一旦设定,在最终发布是无法修改的,特别是客户的SQL SERVER服务器不可能和你调试的程序环境是一样的基于这个考虑。引进两个比较好的东西:(1)、Server.Mappath函数(2)、读取web.config(本示例同时告诉你如何操作web.config配置文件)最终修改如下:(完整代码)数据库为sql server2000using CrystalDecisions.Shared ;/负责解释TableLogOnInfo类using CrystalDecisions.CrystalReports .Engine ;/负责解释ReportDocument类private void Page_Load(object sender, System.EventArgs e)TableLogOnInfo logOnInfo = new TableLogOnInfo ();/这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表ReportDocument oRpt = new ReportDocument();/获取.rpt文件真实路径string path1,path2;path1=Server.MapPath (exerpagelet);path2=path1+crystalcr1.rpt;/oRpt.Load(c:inetpubwwwr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JG/T 123-2000沥青路面养护车
- DZ/T 0273-2015地质资料汇交规范
- DZ/T 0264-2014遥感解译地质图制作规范(1∶250 000)
- DZ 21-1982硬质合金钎头
- CJ/T 536-2019可调式堰门
- CJ/T 394-2018电磁式燃气紧急切断阀
- CJ/T 159-2006铝塑复合压力管(对接焊)
- CJ/T 141-2018城镇供水水质标准检验方法
- 思想品德鉴定试题及答案
- 多媒体应用设计师试题资源分享
- 项目质量情况通报和汇报机制
- 叠合板专项施工方案
- 销售管理实际运用PDCA循环课件
- 社区老旧小区提升改造方案
- 铁路行李包裹运输-行包托运与承运业务办理
- 《-宽容让生活更美好》
- 辽宁省住房制度改革的实施方案
- (完整word版)通讯录标准模板
- 中国文化遗产资料长城100字
- 指针式万用表的使用方法演示幻灯片
- 下肢深静脉血栓试题
评论
0/150
提交评论