水晶报表.docx

上传人:b****5 文档编号:7664074 上传时间:2023-01-25 格式:DOCX 页数:28 大小:776.94KB
下载 相关 举报
水晶报表.docx_第1页
第1页 / 共28页
水晶报表.docx_第2页
第2页 / 共28页
水晶报表.docx_第3页
第3页 / 共28页
水晶报表.docx_第4页
第4页 / 共28页
水晶报表.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

水晶报表.docx

《水晶报表.docx》由会员分享,可在线阅读,更多相关《水晶报表.docx(28页珍藏版)》请在冰豆网上搜索。

水晶报表.docx

水晶报表

   水晶报表引擎(CrystalReportEngine(CREngine.dll))

  通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。

也正是因为报告引擎的作用,才可以将Asp.Net中的水晶报表转换成为普通HTML格式

  水晶报表设计器(CrystalReportDesigner(CRDesigner.dll))

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

   .rpt报表文件

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

   DataSource

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

  水晶报表查看控件(CrystalReportViewerwebformControl(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工具栏中拖动水晶报表查看器控件(CrystalReportViewer)至.aspx页面中。

  

 

 

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

  3)点击[...]按钮查看"DataBinding"属性,并弹出了DataBinding窗口。

[page]

  4) 从左边的"Bindable属性”区中选择“ReportSource”

  5)选中"自定义绑定表达式"单选按钮,在右边的底部的窗口中指定.rpt文件的文件名和路径,例如:

"C:

\\ProgramFiles\\MicrosoftVisualStudio.NET\\CrystalReports\\Samples\\Reports\\GeneralBusiness\\WorldSalesReport.rpt",然后”确定“

 

 

  注意:

文件”WorldSalesReport.rpt“文件是在VS.Net安装时创建的。

如果你在安装过程中指定了其它目录,此时你最好确认一下路径的正确性。

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

<%@RegisterTagPrefix="cr"Namespace="CrystalDecisions.Web"Assembly="CrystalDecisions.Web"%>

  以及:

<CR:

CRYSTALREPORTVIEWER>

  id="CrystalReportViewer1"

  runat="server"Width="350px"Height="50px"

  ReportSource='<%#"C:

\\ProgramFiles\\MicrosoftVisualStudio.NET\\CrystalReports\\Samples\\Reports\\GeneralBusiness\\WorldSalesReport.rpt"%>'>

 </CR:

CRYSTALREPORTVIEWER>

  注意:

在飞刀我的VS.Net正式版中自动生成的代码中ReportSource产生的样式不是这样子的,它是:

ReportSource="<%#C:

\xxxxx\xxx.rpt%>"

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

∙DataBind中要有双引号,因此外部只能用单引号

∙目录分隔符号不能使用"\",必须使用"\\"

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

  6)在Page_Load方法中调用DataBind方法。

(代码为VB.Net)

PrivateSubPage_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)

DataBind()

EndSub

  7)保存并编译你的页面。

现在,你就有一个内嵌水晶报表的WebForm页面了。

  注意:

实际开发中,一开始会出现无法访问inetsrv目录的错误,解决的办法是改变其目录的安全属性,使User用户有可写的权限。

飞刀我发现.Net系统自已给出的解决方法是没有用的,也可能是我使用的是Windows.Net操作系统的原因。

 

使用Pull模式

  我们将通过下面的这些步骤来通过Pull模式来执行水晶报表

  1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。

  2.拖放一个CrystalReportViewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。

  3.在代码中调用DataBind方法。

  创建.rpt文件:

  1)在右击”解决方案游览器“,在弹出的菜单中选择”添加“--”添加新项“-->”CrystalReport” 

  2)在”CrystalReport库”中选择”作为空白报表“单选按钮,最后单击“确定“。

 

  3)这里将弹出水晶报表设计器。

 

  4)右击报表中的”详细资料区”,选择“数据库”->“添加/删除数据库..."

  5)在弹出的”数据库专家“中,扩展”OLEDB(ADO)“选项,此时会弹出另外一个”OLEDB(ADO)“窗口。

  6)在"OLEDB(ADO)"弹出窗口中,选择"MicrosoftOLEDBProviderforSQLServer"然后"Next"

  7)指定连接的信息

  服务器:

ASPCN(您的机器是什么名字就写什么)

  用户ID:

sa

  密码:

  数据库:

Pubs

  8)单击”Next“,最后单击”Finish“按钮。

  9)这时你就能在”数据库专家“窗口中看到我们选择的数据库。

[page]

  10)扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK"按钮。

 

  11)现在在”字段资源浏览器“中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。

  12)拖放需要的字段进入报表的”详细资料“区。

字段名将会自动出现在”页眉“区。

如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。

  13)保存,这样我们就有了一个水晶报表文件。

  创建CrystalReportViewer控件

  14)回到前面的WebForm中,拖放一个CrystalReportViewer控件到页面中去。

  15)调出CrystalReportViewer控件的属性窗口,选择“DataBindings"区点击[...]

  16)”CrystalReportViewer数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑定表达式”中指定.rpt文件路径。

 

  17)此时你能够从CrystalReportViewer控件中看到使用一些虚拟数据组成的报表文件的预览。

  注意:

在上面的例子中,CrystalReportViewer可以在设计时直接调用真实的数据,因为此时数据已经保存。

在这种情况下,设计时当没有保存数据时,他是不能显示数据的。

取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。

  CodeBehind程序设计

  18)在Page_Load方法中调用DataBind方法。

  执行你的程序

  19)创建并运行你的程序!

 

您现在就可以直接在Web页面中使用水晶报表内置的一些功能,如页面导航,缩放等。

使用PUSH模式

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

  1.设计一个DataSet

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

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

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

  5.调用DataBind方法。

   设计一个DataSet

  1)右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”

  2)从“服务器资源管理器”中的“SQLServer”中拖放“Stores”表(位于PUBS数据库中)。

 

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

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

  创建.rpt文件:

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

  5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“

  6)在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。

  7)将”Stores"表添加到“选定的表”中,点击“OK”

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

  建立一个CrystalReportViewer控件

  9)建立一个CrystalReportViewer控件,并设定其属性,此处与PULL模式下是一致的。

  CodeBehind代码:

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

VB.Net代码:

  SubBindReport()

    DimmyConnectionAsNewSqlClient.SqlConnection()

    myConnection.ConnectionString="server=(local)\NetSDK;database=pubs;Trusted_Connection=yes"

    DimMyCommandAsNewSqlClient.SqlCommand()[page]

    MyCommand.Connection=myConnection

    MyCommand.CommandText="Select*fromStores"

    MyCommand.CommandType=CommandType.Text

    DimMyDAAsNewSqlClient.SqlDataAdapter()

    MyDA.SelectCommand=MyCommand

    DimmyDSAsNewDataset1()

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

    MyDA.Fill(myDS,"Stores")

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

    DimoRptAsNewCrystalReport1()

    '水晶报表绑定

    oRpt.SetDataSource(myDS)

    '设定水晶报表的ReportSource

    CrystalReportViewer1.ReportSource=oRpt

  EndSub

C#代码:

privatevoidBindReport()

{

  stringstrProvider="Server=(local);DataBase=pubs;UID=sa;PWD=";

  CrystalReport1oCR=newCrystalReport1();

  Dataset1ds=newDataset1();

  SqlConnectionMyConn=newSqlConnection(strProvider);

  MyConn.Open();

  stringstrSel="Select*fromStores";

  SqlDataAdapterMyAdapter=newSqlDataAdapter(strSel,MyConn);

  MyAdapter.Fill(ds,"stores");

  oCR.SetDataSource(ds);

  this.CrystalReportViewer1.ReportSource=oCR;

}

  注意:

在上面的代码中,你得注意一下oRpt是"StronglyTyped"的报表文件。

如果你需要使用"UnTyped"报表,你得使用ReportDocument对象,然后再调用报表文件。

  运行你的程序。

  11)运行你的程序

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

  你能够将报表文件导出成为下列格式:

      1.PDF(PortableDocumentFormat)

      2.DOC(MSWordDocument)

      3.XLS(MSExcelSpreadsheet)

      4.HTML(HyperTextMarkupLanguage–3.2or4.0compliant)

      5.RTF(RichTextFormat)

  使用Pull模式导出报表

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

C#代码:

VB.Net代码:

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click

  DimmyReportAsCrystalReport1=NewCrystalReport1()

  '注意:

这里我们建立一个strong-typed的水晶报表实例。

    DimDiskOptsAsCrystalDecisions.Shared.DiskFileDestinationOptions=NewCrystalDecisions.Shared.DiskFileDestinationOptions()

    myReport.ExportOptions.ExportDestinationType=CrystalDecisions.[Shared].ExportDestinationType.DiskFile

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

  '如MicrosoftExchange,MAPI等.

    myReport.ExportOptions.ExportFormatType=CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat

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

    DiskOpts.DiskFileName="c:

\Output.pdf"

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

    myReport.ExportOptions.DestinationOptions=DiskOpts

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

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

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

    myReport.Export()

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

EndSub

  使用PUSH模式导出水晶报表

当导出的报表是由PUSH模式建立的时,第一步就是通过编程建立连接并组装DataSet,设置报表的的SetDataSource属性。

再下面的步骤就有Pull模式一样的了。

ASP.NET中利用CrystalReport创建图表

  在很多的应用程序中,报表是不可缺少的,一张好的报表能直观地让人把握数据的情况,方便决策。

在这篇文章中,我们将以一个三层结构的程序为例,介绍如何使用crystalreport,来制作一份报表,其中介绍了不少和水晶报表的技巧。

  在这个例子中,我们设想的应用要为一个销售部门制作一份报表,管理者可以查看某段时间之内的销售情况,以列表或者折线图的形式反映出销售的趋势。

我们将使用SQLServer2000做为数据库,使用VB.NET编写中间层逻辑层,而前端的表示层使用C#。

我们先来看下数据库的结构。

 

  其中,tbitem表中存放的是每张订单中所订购的货品,tbsales存放的是每张订单,tblsalesperson是销售员表,存放该出版社的每位销售员。

  接下来,使用SQLServer2000来创建这些表。

表的结构如下所示:

CREATETABLE[dbo].[tblItem](

[ItemId][int]NOTNULL,

[Description][varchar](50)NOTNULL

)ON[PRIMARY]

CREATETABLE[dbo].[tblSalesPerson](

[SalesPersonId][int]NOTNULL,

[UserName][varchar](50)NOTNULL,

[Password][varchar](30)NOTNULL

)ON[PRIMARY]

CREATETABLE[dbo].[tblSales](

[SaleId][int]IDENTITY(1,1)NOTNULL,

[SalesPersonId][int]NOTNULL,

[ItemId][int]NOTNULL,

[SaleDate][datetime]NOTNULL,

[Amount][int]NOTNULL

)ON[PRIMARY]

  并且用以下的代码创建表之间的约束关系。

ALTERTABLEtblItem

ADDCONSTRAINTPK_ItemId

PRIMARYKEY(ItemId)

GO

ALTERTABLEtblSalesPerson

ADDCONSTRAINTPK_SalesPersonId

PRIMARYKEY(SalesPersonId)

GO

ALTERTABLEtblSales

ADDCONSTRAINTFK_ItemId

FOREIGNKEY(ItemId)REFERENCEStblItem(ItemId)

GO

ALTERTABLEtblSales

ADDCONSTRAINTFK_SalesPersonId

FOREIGNKEY(SalesPersonId)REFERENCEStblSalesPerson(SalesPersonId)

GO

 

  创建中间逻辑层

  在中间逻辑层组件中,我们为每一张表都创建两个类。

比如,对于tblItems表,创建item和items类。

Item类中记录每件销售的货品的详细情况,而items表则记录所有销售的货品并且有增加货品的方法。

这样,就存在下面的六个类:

  ItemandItems

  SalesPersonandSalesPersons

  SaleandSales

  接下来,看一下每个类中的属性:

  Item类

   包括如下属性

    ItemId(货品id编号)

    Description(货品的描述)

    Items

  有一个方法,将根据item的编号返回一个item对象

PublicFunctionGetAllItems()AsCollections.ArrayList

  SalesPerson

  该类有以下三个属性:

   SalesPersonId(销售员编号)

   Name(姓名)

   Password(密码)

  SalesPersons

  有一个方法,根据销售员登陆时输入的用户名和密码,在数据库中,验证销售员的登陆是否正确,如果正确,则返回零。

PublicFunctionValidateUser(strUserNameasString,strPasswordasString)AsInteger

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1