知识大全 Asp.Net中使用水晶报表
Posted 知
篇首语:少年乘勇气,百战过乌孙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.Net中使用水晶报表相关的知识,希望对你有一定的参考价值。
Asp.Net中使用水晶报表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
以下内容为程序代码: 在我们对VS Net中的水晶报表(Crystal Reports)进行研究之前 我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心 一周以后 在阅读了大量的 HOWTO 文档之后 我们成功地将一些简单的报告加入到了我们的程序中 并得到了一些小决窍 这篇文章教你如何在 Net Web应用中使用水晶报表 也可以让你在学习过程中少走一些弯路 为了得到最好的效果 读者最好需要有一些基础的Asp Net访问数据库的知识以及使用VS Net的开发经验 简介 水晶报表可以由很多的方法得到 其中一个就是使用VS Net来创建 它提供了非常丰富模型以使我们能够在运行时操作属性和方法 如果你正在使用VS Net开发 Net程序 那么你就不需要再安装其它软件了 因为他已经内嵌在VS Net中了 优点: VS Net水晶报表有下面一些主要的优点 快速的报表开发 能够导出成为复杂的交互性图表 可以与其它控件一起在WebForm中使用 能够动态地将报表导出成为 pdf doc xls 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中的水晶报表如果没有注册 那么它只能使用 次 次后 保存 功能就不能再使用了 为了避免这个 你不是不在 这里注册此产品 (好像不是这样子的 不注册也好像能用很长的时间 只是不能提供支持) 默认安装的水晶报表只能支持 个用户 为了支持更多的用户 你不得不在 中购买许可证 让我们感受一下----在中使用一个现成的水晶报表文件 ) 从WebForm工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至 aspx页面中 ) 调出水晶报表查看器控件的属性窗口 ) 点击[ ]按钮查看 Data Binding 属性 并弹出了DataBinding窗口 ) 从左边的 Bindable属性 区中选择 Report Source ) 选中 自定义绑定表达式 单选按钮 在右边的底部的窗口中指定 rpt文件的文件名和路径 例如 C:\\\\Program Files\\\\Microsoft Visual Studio NET\\\\Crystal Reports\\\\Samples\\\\Reports\\\\General Business\\\\World Sales Report rpt 然后 确定 注意 文件 World Sales Report rpt 文件是在VS Net安装时创建的 如果你在安装过程中指定了其它目录 此时你最好确认一下路径的正确性 上面的步骤中实际上是插入了下面这些代码至Asp Net文件中 以及 id= CrystalReportViewer runat= server Width= px Height= px ReportSource= > 注意 在飞刀我的VS Net正式版中自动生成的代码中ReportSource产生的样式不是这样子的 它是 ReportSource= 这样是错误的 会出现错误信息 有两处错误 必须按照使用本文介绍的格式来手动修改 这也算是VS Net的一个Bug吧 ) 在Page_Load方法中调用DataBind方法 (代码为VB Net) Private Sub Page_Load(ByVal sender As System Object ByVal e As System EventArgs) DataBind() End Sub )保存并编译你的页面 现在 你就有一个内嵌水晶报表的WebForm页面了 注意 实际开发中 一开始会出现无法访问inetsrv目录的错误 解决的办法是改变其目录的安全属性 使User用户有可写的权限 飞刀我发现 Net系统自已给出的解决方法是没有用的 也可能是我使用的是Windows Net操作系统的原因 以下内容为程序代码: 使用Pull模式 我们将通过下面的这些步骤来通过Pull模式来执行水晶报表 首先创建rpt文件 并使用水晶报表设计接口设置一些必须的数据连接 拖放一个 CrystalReportViewer控件至aspx页面 设置它的属性指定我们上一步创建的 rpt文件 在代码中调用DataBind方法 创建 rpt 文件: ) 在右击 解决方案游览器 在弹出的菜单中选择 添加 -- 添加新项 --> Crystal Report ) 在 Crystal Report 库 中选择 作为空白报表 单选按钮 最后单击 确定 )这里将弹出水晶报表设计器 ) 右击报表中的 详细资料区 选择 数据库 -> 添加/删除数据库 ) 在弹出的 数据库专家 中 扩展 OLE DB(ADO) 选项 此时会弹出另外一个 OLE DB(ADO) 窗口 ) 在 OLE DB (ADO) 弹出窗口中 选择 Microsoft OLE DB Provider for SQL Server 然后 Next ) 指定连接的信息 服务器 : ASPCN (您的机器是什么名字就写什么) 用户 ID: sa 密码: 数据库 : Pubs ) 单击 Next 最后单击 Finish 按钮 ) 这时你就能在 数据库专家 窗口中看到我们选择的数据库 ) 扩展 Pubs 数据库 扩展 表 选择 Stores 表并将其加到 选定的表 区中 单击 OK 按钮
) 现在在 字段资源浏览器 中就会在左边 数据库字段 区中显示你选择的表 以及表中的字段 ) 拖放需要的字段进入报表的 详细资料 区 字段名将会自动出现在 页眉 区 如果你想修改头部文字 则可以右击 页眉 区中的文字 选择 编辑文本对象 选项并进行编辑 ) 保存 这样我们就有了一个水晶报表文件 创建 CrystalReportViewer 控件 ) 回到前面的WebForm中 拖放一个Crystal Report Viewer控件到页面中去 ) 调出Crystal Report Viewer控件的属性窗口 选择 DataBindings 区点击[ ] ) Crystal Report Viewer 数据绑定窗口 中 在右边的 可绑定属性 中选择 ReportSource 并选择右下角的 自定义绑定表达式 中指定 rpt文件路径 ) 此时你能够从Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览 注意 在上面的例子中 CrystalReportViewer可以在设计时直接调用真实的数据 因为此时数据已经保存 在这种情况下 设计时当没有保存数据时 他是不能显示数据的 取而代这的是显示一些虚拟的数据 只有在执行时才会选取真实的数据 Code Behind 程序设计 ) 在Page_Load方法中调用DataBind方法 执行你的程序 ) 创建并运行你的程序! 您现在就可以直接在Web页面中使用水晶报表内置的一些功能 如页面导航 缩放等 [HTML]我们采用下面的几步使用Push模式执行水晶报表 设计一个DataSet 创建一个 rpt文件同时将其指定给上一步建立的DataSet 在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系 在代码中访问数据库并把数据存入DataSet 调用DataBind方法 设计一个DataSet ) 右击 解决方案浏览器 选择 添加 添加新项 > 数据集 ) 从 服务器资源管理器 中的 SQL Server 中拖放 Stores 表(位于PUBS数据库中) ) 此时在数据集中就会有一个Stores表的结构图 xsd文件中仅仅包含一个结构图 但是不会有任何数据在里面 创建 rpt 文件 : ) 使用上面的介绍过的方法创建此文件 唯一的不同就是使用数据集来代替前面的直接连接数据 )建立 rpt文件之后 右击 详细资料 > 添加/删除数据库 ) 在 数据库专家 窗口中 展开 项目数据 (代替以前的OleDb) 展开 ADO Net数据集 DataSet 选择 Stores 表 ) 将 Stores 表添加到 选定的表 中 点击 OK ) 使用PULL模式下的方法 建立一个WebForm 建立一个Crystal Report Viewer 控件 ) 建立一个Crystal Report Viewer 控件 并设定其属性 此处与PULL模式下是一致的 Code Behind 代码: ) 在Page_Load方法中使用下面的子函数 VB Net代码 Sub BindReport() Dim myConnection As New SqlClient SqlConnection() myConnection ConnectionString= server= (local)\\NetSDK;database=pubs;Trusted_Connection=yes Dim MyCommand As New SqlClient SqlCommand() MyCommand Connection = myConnection MyCommand CommandText = Select * from Stores MyCommand CommandType = CommandType Text Dim MyDA As New SqlClient SqlDataAdapter() MyDA SelectCommand = MyCommand Dim myDS As New Dataset () 这就是我们在设计模式上使用的DataSet MyDA Fill(myDS Stores ) 你不得不使用与你前面DataSet相同名字 Dim oRpt As New CrystalReport () 水晶报表绑定 oRpt SetDataSource(myDS) 设定水晶报表的ReportSource CrystalReportViewer ReportSource = oRpt End Sub C#代码 private void BindReport() string strProvider = Server=(local);DataBase=pubs;UID=sa;PWD= ; CrystalReport oCR = new CrystalReport (); Dataset ds = new Dataset (); 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 CrystalReportViewer ReportSource = oCR; 注意 在上面的代码中 你得注意一下oRpt是 Strongly Typed 的报表文件 如果你需要使用 UnTyped 报表 你得使用ReportDocument对象 然后再调用报表文件 运行你的程序 ) 运行你的程序 将报表文件导出成为其它格式 你能够将报表文件导出成为下列格式 PDF (Portable Document Format) DOC (MS Word Document) XLS (MS Excel Spreadsheet) HTML (Hyper Text Markup Language – or pliant) RTF (Rich Text Format) 使用Pull模式导出报表 当导出使用Pull模式创建的文件时 水晶报表准确地打开所需要的数据 下面是执行导出功能的代码 C#代码: VB Net代码: Private Sub Button _Click(ByVal sender As System Object ByVal e As System EventArgs) Handles Button Click Dim myReport As CrystalReport = New CrystalReport () 注意 这里我们建立一个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 如果你不指定确切的目录 那么文件就会保存到[Windows]\\System 目录中去了 myReport ExportOptions DestinationOptions = DiskOpts 水晶报表文件不包含直接的FileName属性 因此你不能直接指定保存的文件名 所以你不得不使用DiskFileDestinationOptions对象 设置它的DiskFileName属性 为你想要的路径 最后将水晶报表的DestinationsOptions属性指定为上面的DiskFileDestinationOption myReport Export() 上面的代码将完成导出工作 End Sub
使用PUSH模式导出水晶报表 当导出的报表是由PUSH模式建立的时 第一步就是通过编程建立连接并组装DataSet 设置报表的的SetDataSource属性 再下面的步骤就有Pull模式一样的了 [/HTML] NET环境下水晶报表使用总结 水晶报表是一个优秀的报表开发工具 本人在开发通用管理系统的时候 所有报表都使用水晶报表 其简单 易用和强大的功能令笔者倍加喜爱 现将水晶报表使用手记呈现给大家 一 在使用自带的水晶报表时 请注册 否则只能使用 次 水晶报表注册码 注册号: 密码:AAP GKS GDE DS 二 使用CrystalReportViewer进行预览 CrystalReportViewer控件允许在应用程序中查看 Crystal Report ReportSource 属性用于设置要查看哪个报表 该属性设置之后 报表显示在查看器中 报表源可以是ReportDocument 报表文件的路径 也可以是强类型报表 打开 工具箱 并将一个 CrystalReportViewer 拖到窗体上 我们命名为rptVew 通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置 当运行应用程序时 报表将显示在查看器中 三 创建新报表 指向 添加 单击 添加新项 在 添加新项 对话框中 从 模板 区域选择 Crystal Report 将报表命名为rptClient 单击 打开 在 Crystal Report 库中 选择下列选项之一 · 使用报表专家 — 指导您完成报表的创建过程 并将您的选择添加到 Crystal Report Designer · 作为空白报表 — 打开 Crystal Report Designer · 来自于现有的报表 — 创建新报表 它与指定的另一报表设计相同 注意 Crystal Report 库包含许多专家 可以指导您完成数个特定类型报表的创建工作 您可能希望使用专家来创建最初的报表 以确定哪种报表构造方法适合您的需要 单击 确定 按钮 如果选择使用 报表专家 便会出现 报表专家 对话框 并带有数据资源管理器 为每个文件夹选择所需数据 完成 报表专家 选项卡界面上的操作 然后单击 完成 来访问 Crystal Report Designer 和您的报表 四 是否需要动态设置数据源? Crystal Reports 通过数据库驱动程序与数据库连接 每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术 拉和推模型 为了向开发人员提供最灵活的数据访问方法 Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型 拉模型 在拉模型中 驱动程序将连接到数据库并根据需要将数据 拉 进来 使用这种模型时 与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理 不需要开发人员编写代码 如果在运行时无须编写任何特殊代码 则使用拉模型 推模型 相反 推模型需要开发人员编写代码以连接到数据库 执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集 并且将该对象传递给报表 该方法使您可以将连接共享置入应用程序中 并在 Crystal Reports 收到数据之前先将数据筛选出来 四 从 ADO NET 数据集制作报表 从数据库创建数据集对象 在项目中新建一个架构文件 a 在解决方案资源管理器中 右击项目名 指向 添加 然后单击 添加新项 b 在 添加新项 对话框的 类别 区域 展开文件夹 然后选择 数据 c 在 模板 区域选择 数据集 d 接受默认名称 Dataset xsd 这就创建了一个新的架构文件 (Dataset xsd) 以后将用它来生成强类型数据集 该架构文件将显示在 ADO NET 数据集设计器中 指定数据库位置 a 在服务器资源管理器中 右击 数据连接 并选择 添加连接 b 在 数据链接属性 对话框中 单击 提供程序 选项卡 然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server) c 单击 连接 选项卡 然后指定您的数据库所在位置 在所需位置输入服务器和登录信息 d 单击 确定 按钮 此时 您的数据库及其表和字段就出现在服务器资源管理器的 数据连接 节点下面 在解决方案资源管理器中 双击 Dataset xsd (如果它尚不是活动视图) Dataset xsd 现在应显示在 数据集 选项卡中 若要为数据集建立架构 请将需要的表从服务器资源管理器中拖动到 Dataset xsd 的 数据集 选项卡上 单击 保存 Dataset xsd 来保存 Dataset xsd 文件 在 生成 菜单上 单击 生成 为项目生成数据集对象 ADO NET 数据集对象提供数据的描述 从它可以向 Crystal report 添加表 使用 Crystal Report Designer 中的 数据库专家 从 ADO NET 数据集对象添加表 请在使用 报表专家 创建新报表时调用 数据库专家 或者 要从一个已经使用 ADO NET 建立好的报表中访问 数据库专家 请在 Report Designer 中右击 指向 数据库 然后单击 添加/删除数据库
将报表连接到 ADO NET 数据集对象 在 数据库专家 中 展开 项目数据 文件夹 展开 ADO NET 数据集 文件夹 选择所需数据集对象 例如 如果当时使用的是从项目 WindowsApplication 的架构文件 Dataset xsd 中生成的数据集对象 则应该选择 WindowsApplication Dataset 选择要向报表中添加的表 和使用其他数据源一样 五 动态改变数据源的代码 Dim dsdataSet As New DataSet() Dim oRpt As New rptClient() 已建立的报表rptClient 请读者自行填充数据集dsdataSet 使用 报表引擎 对象模型将填充的数据集 传递给报表 oRpt SetDataSource(dsdataSet Tables( )) 将带有数据的报表对象绑定到 Windows 窗体查看器 rptVew(CrystalReportViewer控件) rptVew ReportSource = oRpt 注意 FillDataSet 方法可连接到指定的数据库 提取数据 然后断开数据库连接 如果您希望将数据库中的多个表添加到报表中 请使用 SQL JOIN 语句将这些表联接在一起 然后在 FillDataSet 方法中指定一个结果表 六 创建主从报表 在报表中 有许多报表是主从表结构 比如订单与订单商品明细 订单是一个表中的一条记录 而分录是另一个表中的多条记录 两个表通过一个字段关联起来 这种报表可利用其分组功能实现 新建一个工程 往FORM 中添加一个CrystalReportViewer控件 在服务噐资源管理器中连接到SQL SERVER 上的Northwind数据库 添加一个数据集Dataset 将服务器资源管理器中的Orders和 Order Details加入到数据集中 添加一个水晶报表 使用报表专家 在项目数据中选择 ADO NET数据集 插入表Orders和 Order Details 链接 中是关联字段的链接 在 字段 中选择要显示的主表和明细表的字段 组中选择分组依据为Orders表OrdersID字段 总计 图表 选择(可进行筛选) 样式(可设置报表标题) 可自行设置 设置完后 点击完成 在报表设计器中调整需要显示的字段的位置 宽度等 在窗口中添加代码 Private Sub Form _Load(ByVal sender As System Object ByVal e As System EventArgs) Handles MyBase Load Dim oRpt As New CrystalReport () Dim dsdataSet As New Dataset () Dim CN As New Data SqlClient SqlConnection( data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa ) CN Open() Dim daOrders As New Data SqlClient SqlDataAdapter( select * from orders CN) daOrders Fill(dsdataSet orders ) Dim daDetails As New Data SqlClient SqlDataAdapter( select * from [Order Details] CN) daDetails Fill(dsdataSet Order Details ) 使用 报表引擎 对象模型将填充的数据集 传递给报表 oRpt SetDataSource(dsdataSet) CrystalReportViewer ReportSource = oRpt End Sub 运行程序 七 用程序改变报表中text的文本 代码如下 Dim GetTextObject As TextObject 按名称获取 ReportObject 将其转换为 TextObject 并返回此对象 GetTextObject = orpt ReportDefinition ReportObjects Item( text ) GetTextObject Text = XXXX系统 总结 水晶报表具有非常强大的功能 还可进行导出WORD EXCEL RTF等文件 还可生成复杂 漂亮图表 是进行WEB和WINDOWS报表开发的利器
(此文部分资料来自MSDN) Author:李洪根 E MAIL: 本人有如下设想 通过连接查询获得SQL数据库相关数据 置放在DataSet里 调用水晶报表(线形或柱形模板) 生成报表 输出生成EXCEL文档 请教各位大侠 如何实现以上思路?(如有范例就更好了) 非常感谢! 在你的工程中添加新项目DataSet 连结数据库 将需要的数据表或预存程序 拖入此DataSet中 编译DataSet 使用自带的Crystal Report 以DataSet为数据源建立报表 在程序中将数据推入此报表中 Crystal Report 有输出为Excel的选项 通过程序也可以实现 Dim conn As SqlConnection Dim da As SqlDataAdapter Dim strSQL As String conn = New SqlConnection() conn ConnectionString = User ID=sa; PWD= ;Data Source=xxxx; Initial Catalog =xxxxx conn Open() strSQL = Select * from TableName da = New SqlDataAdapter(strSQL conn) Dim ds As New DataSet() da Fill(ds TableName ) Dim RptDoc As New ReportName() RptDoc SetDataSource(ds) 给RptDoc 指定数据 CrystalView ReportSource = RptDoc 给CrystalView指定数据 CrystalView DataBind() conn Close() 如果需要显示的为多表关联的字段 最好以存储过程建立DataSet 请参考如下代码: string strconn=连接串; SqlConnection myconn=new SqlConnection(strconn); string strcmd=@ select语句 ; SqlCommand mycmd=new SqlCommand(strcmd myconn); SqlDataAdapter myda=new SqlDataAdapter(strcmd myconn); DataSet myds=new DataSet(); myconn Open(); myda Fill(myds 报表名 ); 报表名 myrpt =new 报表名(); myrpt SetDataSource(myds); this CrystalReportViewer ReportSource=myrpt; 导出到EXCEL: myrpt ExportOptions ExportDestinationType=CrystalDecisions Shared ExportDestinationType DiskFile; myrpt ExportOptions ExportFormatType=CrystalDecisions Shared ExportFormatType Excel; CrystalDecisions Shared DiskFileDestinationOptions opt=new CrystalDecisions Shared DiskFileDestinationOptions(); opt DiskFileName=@ 文件名 ; myrpt ExportOptions DestinationOptions =opt; myrpt Export(); 水晶报表 的中文帮助 下载 x Crystal Reports for Visual Studio NET PictureObject 成员请参见 PictureObject 类 ¦ CrystalDecisions CrystalReports Engine 命名空间 公共实例属性 Border(从 ReportObject 中继承而来) Border 获取 Border 对象 Height(从 ReportObject 中继承而来) Int 获取或设置以缇为单位的对象高度 Kind(从 ReportObject 中继承而来) ReportObjectKind 获取报表对象的类型 Left(从 ReportObject 中继承而来) Int 获取或设置以缇为单位的对象左上角位置 Name(从 ReportObject 中继承而来) 字符串 获取对象名 ObjectFormat(从 ReportObject 中继承而来) ObjectFormat 获取 ObjectFormat 对象 Top(从 ReportObject 中继承而来) Int 获取或设置以缇为单位的对象顶部位置 Width(从 ReportObject 中继承而来) Int 获取或设置以缇为单位的对象宽度 请参见 PictureObject 类 Imports CrystalDecisions CrystalReports Engine Dim picObject As PictureObject picObject = oRpt ReportDefinition ReportObjects Item( picture ) 来自
大家在基于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 = ; // 对报表中的每个表依次循环 for (i= ;i == Report Database Tables Count ;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:\\\\inetpub\\\\root\\\\exer\\\\pagelet\\\\crystal\\\\cr rpt );//修改为你自//己的正确位置 //建立安全信息 //受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法 但 LogOnInfo ServerName //和 LogOnInfo DatabaseName 要保留为空 logOnInfo ConnectionInfo ServerName = ; logOnInfo ConnectionInfo DatabaseName = archives ; logOnInfo ConnectionInfo UserID = sa ; logOnInfo ConnectionInfo Password = ; oRpt Database Tables [ ] ApplyLogOnInfo (logOnInfo); //建立 rpt文件与CryStalReportviewer文件之间的连接 CrystalReportViewer ReportSource = oRpt; 报表文件终于出现! 哇 我好高兴 禁不住站起来伸了个懒腰! 步骤四 最终的完整版的代码 上面的代码不具有系统可扩充和灵活性 缺点有二 ( ) 数据报表格式文件是采用绝对路径 ( ) 数据库访问权限的设置一旦设定 在最终发布是无法修改的 特别是客户的SQL SERVER服务器不可能和你调试的程序环境是一样的 基于这个考虑 引进两个比较好的东西 ( ) Server Mappath函数
cha138/Article/program/net/201311/13203相关参考
一使用视图meeting将多表关联整合在一起 二通过Sql语句筛选数据 三建立和主从表的关联 四注意在CrystalReport表中插入子报表的时候一定要将主从表的关联字段设置好否则出乱子
浅谈ASP.NET报表控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 项目中有报表图形化的需
知识大全 在ASP.NET 2.0中使用RDLC格式的报表的问题
在ASP.NET2.0中使用RDLC格式的报表的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET报表问题的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 做ASPNET项
首先创建水晶报表rpt文件方法还是采用xsd数据集的方式简便容易操作记得将数据集中的相关字段设为你想要在报表中呈现的字段比如说在内容左边加入一个图片就将相应的图片字段拖放过去能不能直接在水晶报表上
VS.Net水晶报表实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 水晶报表可以
net制作水晶报表分以下个步骤 新建一个windowsapplicationCristalTest; 新添加一个数据集DataSetxsd 在DataSet里添加表DataTable
Delphi水晶报表打包解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!开发环境
VS2010水晶报表的使用方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在VS中新建一个“
在ASP.NET开发中使用非.NetWeb服务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lis