c#

位置:IT落伍者 >> c# >> 浏览文章

VS.Net水晶报表实现方法


发布日期:2022年03月10日
 
VS.Net水晶报表实现方法

简介

水晶报表可以由很多的方法得到其中一个就是使用VSNet来创建它提供了非常丰富模型以使我们能够在运行时操作属性和方法如果你正在使用VSNet开发Net程序那么你就不需要再安装其它软件了因为他已经内嵌在VSNet中了

优点:

VSNet水晶报表有下面一些主要的优点

快速的报表开发

能够导出成为复杂的交互性图表

可以与其它控件一起在WebForm中使用

能够动态地将报表导出成为pdfdocxlshtmlrtf等多种格式

结构

一些组件组成了水晶报表的二层结构需要的Web应用有

客户端 :

客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了

服务器 :

水晶报表引擎(Crystal Report Engine (CREnginedll))

通过它可以完成一些任务如在报告文件中合并数据转换报告为其它格式等也正是因为报告引擎的作用才可以将AspNet中的水晶报表转换成为普通HTML格式

水晶报表设计器(Crystal Report Designer (CRDesignerdll))

水晶报表就是在设计器中创建的在设计器中你可以设计标题插入数据公式图表子报表等

rpt报表文件

执行报表中的第一步就是在水晶报表设计器接口创建此报表在默认安装中微软已经提供了一些现成的rpt例子

Data Source

rpt文件取得数据库的方法取决于你方法的选择你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet然后再将其传送到报表文件

水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewerdll))

水晶报表查看控件是一个WebForm控件可以将它看成是一个在aspx页面中存放报表的容器 注意在一些复杂的操作中报表服务器与Web服务器可能不在同一物理主机上Web服务器将HTTP请求传送到报表服务器上去水晶报表也可以当做WebService来执行

执行模式

水晶报表取数据可以使用下面的方法实现

Pull 模式:

被请求时水晶报表直接根据指定的驱动连接数据库然后组装这些数据

Push 模式 :

此时开发表不得不自己编写代码连接数据并组装DataSet同时将它传送至报表在些这种情况下通过使用连接共享以及限制记录集合的大小可以使用报表性能最大化

报表类型

水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象

Stronglytyped 报表 :

当你将报表文件加入到项目中去时它就变成了一个了; stronglytyped; 报表在这些情况下你将拥有直接创建报表的对象的权力这将减少一些代码并且能够提供一些性能

UnTyped 报表 :

这里的报表并不直接包含在项目中因此称为untyped 报表在这种情况下你不得不使用水晶报表的ReportDocuemt; 对象建立一个实例并且手动; 地凋用报表

其它注意事项

尽管水晶报表查看器拥有一些很酷的功能如缩放页面导航等但是他不提供打印功能你不得不调用游览器的打印功能

VSNet中的水晶报表如果没有注册那么它只能使用次后保存; 功能就不能再使用了为了避免这个你不是不在 这里注册此产品 (好像不是这样子的不注册也好像能用很长的时间只是不能提供支持)

默认安装的水晶报表只能支持个用户为了支持更多的用户你不得不在 中购买许可证

让我们感受一下----在中使用一个现成的水晶报表文件

) 从WebForm工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至aspx页面中

) 调出水晶报表查看器控件的属性窗口

) 点击[]按钮查看Data Binding属性并弹出了DataBinding窗口

) 从左边的Bindable属性区中选择; Report Source

) 选中自定义绑定表达式单选按钮在右边的底部的窗口中指定rpt文件的文件名和路径例如C:\\Program Files\\Microsoft Visual StudioNET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Reportrpt然后确定;

注意文件World Sales Reportrpt; 文件是在VSNet安装时创建的如果你在安装过程中指定了其它目录此时你最好确认一下路径的正确性

上面的步骤中实际上是插入了下面这些代码至AspNet文件中

以及  id=CrystalReportViewer

  runat=server Width=px Height=px

  ReportSource=

注意在飞刀我的VSNet正式版中自动生成的代码中ReportSource产生的样式不是这样子的它是

ReportSource=

这样是错误的会出现错误信息有两处错误

必须按照使用本文介绍的格式来手动修改这也算是VSNet的一个Bug吧

) 在Page_Load方法中调用DataBind方法(代码为VBNet) Private Sub Page_Load(ByVal sender As SystemObject ByVal e As SystemEventArgs)

  DataBind()

End Sub

)保存并编译你的页面 现在你就有一个内嵌水晶报表的WebForm页面了

注意实际开发中一开始会出现无法访问inetsrv目录的错误解决的办法是改变其目录的安全属性使User用户有可写的权限飞刀我发现Net系统自已给出的解决方法是没有用的也可能是我使用的是WindowsNet操作系统的原因

AspNet中使用水晶报表(中)

以下内容为程序代码:

使用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页面中使用水晶报表内置的一些功能如页面导航缩放等

AspNet中使用水晶报表(下)

[HTML]我们采用下面的几步使用Push模式执行水晶报表

设计一个DataSet

创建一个rpt文件同时将其指定给上一步建立的DataSet

在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系

在代码中访问数据库并把数据存入DataSet

调用DataBind方法

设计一个DataSet

) 右击; 解决方案浏览器选择; 添加; 添加新项〉; 数据集

) 从; 服务器资源管理器中的; SQL Server中拖放; Stores表(位于PUBS数据库中)

) 此时在数据集中就会有一个Stores表的结构图

xsd文件中仅仅包含一个结构图但是不会有任何数据在里面

创建 rpt 文件 :

) 使用上面的介绍过的方法创建此文件唯一的不同就是使用数据集来代替前面的直接连接数据

)建立rpt文件之后右击; 详细资料添加/删除数据库;

) 在数据库专家; 窗口中展开项目数据; (代替以前的OleDb)展开; ADONet数据集DataSet; 选择Stores; 表

) 将Stores表添加到; 选定的表点击; OK

) 使用PULL模式下的方法建立一个WebForm

建立一个Crystal Report Viewer 控件

) 建立一个Crystal Report Viewer 控件并设定其属性此处与PULL模式下是一致的

Code Behind 代码:

) 在Page_Load方法中使用下面的子函数

VBNet代码  Sub BindReport()

  Dim myConnection As New SqlClientSqlConnection()

  myConnectionConnectionString= server= (local)\NetSDK; database=pubs; Trusted_Connection=yes

  Dim MyCommand As New SqlClientSqlCommand()

  MyCommandConnection = myConnection

  MyCommandCommandText = Select * from Stores

  MyCommandCommandType = CommandTypeText

  Dim MyDA As New SqlClientSqlDataAdapter()

  MyDASelectCommand = MyCommand

  Dim myDS As New Dataset()

  这就是我们在设计模式上使用的DataSet

  MyDAFill(myDS Stores)

  你不得不使用与你前面DataSet相同名字

  Dim oRpt As New CrystalReport()

   水晶报表绑定

  oRptSetDataSource(myDS)

   设定水晶报表的ReportSource

  CrystalReportViewerReportSource = 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);

  MyConnOpen();

  string strSel = Select * from Stores;

  SqlDataAdapter MyAdapter = new SqlDataAdapter(strSelMyConn);

  MyAdapterFill(dsstores);

  oCRSetDataSource(ds);

  thisCrystalReportViewerReportSource = oCR;

}

注意在上面的代码中你得注意一下oRpt是Strongly Typed的报表文件如果你需要使用UnTyped报表你得使用ReportDocument对象然后再调用报表文件

运行你的程序

) 运行你的程序

将报表文件导出成为其它格式

你能够将报表文件导出成为下列格式 PDF (Portable Document Format)

DOC (MS Word Document)

XLS (MS Excel Spreadsheet)

HTML (Hyper Text Markup Language – or compliant)

RTF (Rich Text Format)

使用Pull模式导出报表

当导出使用Pull模式创建的文件时水晶报表准确地打开所需要的数据下面是执行导出功能的代码

C#代码:

VBNet代码: Private Sub Button_Click(ByVal sender As SystemObject ByVal e As SystemEventArgs) Handles ButtonClick

  Dim myReport As CrystalReport = New CrystalReport()

  注意这里我们建立一个strongtyped的水晶报表实例

  Dim DiskOpts As CrystalDecisionsSharedDiskFileDestinationOptions = New CrystalDecisionsSharedDiskFileDestinationOptions()

  myReportExportOptionsExportDestinationType = CrystalDecisions[Shared]ExportDestinationTypeDiskFile

   导出成为其它文件时也需要这个选项

   如Microsoft Exchange MAPI等

  myReportExportOptionsExportFormatType = CrystalDecisions [Shared]ExportFormatTypePortableDocFormat

  这里我们导出成为pdf格式文件你也能选择上面的其它类型文件

  DiskOptsDiskFileName = c:\Outputpdf

  如果你不指定确切的目录那么文件就会保存到[Windows]\System目录中去了

  myReportExportOptionsDestinationOptions = DiskOpts

  水晶报表文件不包含直接的FileName属性因此你不能直接指定保存的文件名

  所以你不得不使用DiskFileDestinationOptions对象设置它的DiskFileName属性

  为你想要的路径最后将水晶报表的DestinationsOptions属性指定为上面的DiskFileDestinationOption

  myReportExport()

  上面的代码将完成导出工作

End Sub

使用PUSH模式导出水晶报表

当导出的报表是由PUSH模式建立的时第一步就是通过编程建立连接并组装DataSet设置报表的的SetDataSource属性再下面的步骤就有Pull模式一样的了

[/HTML]

NET环境下水晶报表使用总结

水晶报表是一个优秀的报表开发工具本人在开发通用管理系统的时候所有报表都使用水晶报表其简单易用和强大的功能令笔者倍加喜爱现将水晶报表使用手记呈现给大家

在使用自带的水晶报表时请注册否则只能使用

水晶报表注册码

注册号:

密码:AAPGKSGDEDS

使用CrystalReportViewer进行预览

CrystalReportViewer控件允许在应用程序中查看 Crystal ReportReportSource 属性用于设置要查看哪个报表该属性设置之后报表显示在查看器中报表源可以是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 收到数据之前先将数据筛选出来

               

上一篇:完全解读C#.NET中的正则表达式

下一篇:33条C#、.Net经典面试题目及答案