=====================================================
一、在使用自带的水晶报表时,请注册,否则只能使用30次
水晶报表注册码
注册号:6707437608
密码:AAP5GKS0000GDE100DS
二、使用CrystalReportViewer进行预览
CrystalReportViewer控件准许在应用程序中查看CrystalReport。ReportSource属性用于设置要查看那个报表。该属性设置以后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径,也可以是强类型报表。
1.打开“工具箱”,并将一个CrystalReportViewer拖到窗体上,我们命名为rptVew。
2.通过拖拽操作将Windows窗体查看器调整到希望的大小并将其联通到所需位置。
3.当运行应用程序时,报表将显示在查看器中。
三、创建新报表
1.指向“添加”,单击“添加新项”。
2.在“添加新项”对话框中,从“模板”区域选择CrystalReport,将报表命名为rptClient,单击“打开”。
3.在CrystalReport库中,选择下述选项之一:
·使用报表专家—指导您完成报表的创建过程,并将您的选择添加到CrystalReportDesigner。
·作为空白报表—打开CrystalReportDesigner。
·来自于现有的报表—创建新报表,它与指定的另一报表设计相同。
注意CrystalReport库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方式适宜您的须要。
4.单击“确定”按钮。
假如选择使用“报表专家”,便会出现“报表专家”对话框,并带有数据资源管理器。为每位文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,之后单击“完成”来访问CrystalReportDesigner和您的报表
四、是否须要动态设置数据源?
CrystalReports通过数据库驱动程序与数据库联接。每位驱动程序都被编撰为可处理特定数据库类型或数据库访问技术。
拉和推模型
为了向开发人员提供最灵活的数据访问方式,CrystalReports数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。
拉模型
在拉模型中,驱动程序将联接到数据库并按照须要将数据“拉”进来。使用这些模型时,与数据库的联接和为了获取数据而执行的SQL命令都同时由CrystalReports本身处理,不须要开发人员编撰代码。假如在运行时无须编撰任何特殊代码,则使用拉模型。
推模型
相反,推模型须要开发人员编撰代码以联接到数据库,执行SQL命令以创建与报表中的数组匹配的记录集或数据集,而且将该对象传递给报表。该方式使您可以将联接共享置入应用程序中,并在CrystalReports收到数据之前先将数据筛选下来。
四、从ADO.NET数据集制做报表
从数据库创建数据集对象
1.在项目中新建一个构架文件:
a.在解决方案资源管理器中,右击项目名,指向“添加”,之后单击“添加新项”。
b.在“添加新项”对话框的“类别”区域,展开文件夹,之后选择“数据”。
c.在“模板”区域选择“数据集”。
d.接受默认名称Dataset1.xsd。
这就创建了一个新的构架文件(Dataset1.xsd),之后将用它来世成强类型数据集。该构架文件将显示在ADO.NET数据集设计器中。
2.指定数据库位置:
a.在服务器资源管理器中,右击“数据联接”并选择“添加联接”。
b.在“数据链接属性”对话框中,单击“提供程序”选项卡水晶报表文件 rpt 为什么没有类文件 cs,之后选择一个提供程序(比如MicrosoftOLEDBProviderforSQLServer)。
c.单击“连接”选项卡,之后指定您的数据库所在位置。在所需位置输入服务器和登陆信息。
d.单击“确定”按钮。
此时,您的数据库及其表和数组就出现在服务器资源管理器的“数据联接”节点下边。
3.在解决方案资源管理器中,双击Dataset1.xsd(假如它尚不是活动视图)。
Dataset1.xsd现今应显示在“数据集”选项卡中。
4.若要为数据集构建构架,请将须要的表从服务器资源管理器中拖动到Dataset1.xsd的“数据集”选项卡上。
5.单击“保存Dataset1.xsd”来保存“Dataset1.xsd”文件。
6.在“生成”菜单上,单击“生成”为项目生成数据集对象。
ADO.NET数据集对象提供数据的描述,从它可以向Crystalreport添加表。使用CrystalReportDesigner中的“数据库专家”从ADO.NET数据集对象添加表。
请在使用“报表专家”创建新报表时调用“数据库专家”。或则,要从一个早已使用ADO.NET构建好的报表中访问“数据库专家”,请在ReportDesigner中右击,指向“数据库”,之后单击“添加/删掉数据库”。
将报表联接到ADO.NET数据集对象
1.在“数据库专家”中,展开“项目数据”文件夹。
2.展开“ADO.NET数据集”文件夹。
3.选择所需数据集对象。
比如,假如当时使用的是从项目“WindowsApplication1”的构架文件“Dataset1.xsd”中生成的数据集对象,则应当选择“WindowsApplication1.Dataset1”。
4.选择要向报表中添加的表,和使用其他数据源一样。
五、动态改变数据源的代码
DimdsdataSetAsNewDataSet()
DimoRptAsNewrptClient()'已完善的报表rptClient
请读者自行填充数据集dsdataSet
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet.Tables(0))
'将带有数据的报表对象绑定到Windows窗体查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource=oRpt
注意FillDataSet方式可联接到指定的数据库,提取数据,之后断掉数据库联接。倘若您希望将数据库中的多个表添加到报表中,请使用SQLJOIN句子将这种表连接在一起;之后在FillDataSet方式手指定一个结果表
六、创建主从报表
在报表中,有许多报表是主从表结构,例如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个数组关联上去,这些报表可借助其分组功能实现,
1.新建一个工程
2.往FORM1中添加一个CrystalReportViewer控件
3.在服务噐资源管理器中联接到SQLSERVER2000上的Northwind数据库
4.添加一个数据集Dataset1,将服务器资源管理器中的Orders和OrderDetails加入到数据集中。
5.添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders和OrderDetails,“链接”中是关联数组的链接,在“字段”中选择要显示的主表和明细表的主键,组中选择分组根据为Orders表OrdersID数组,总计,图表,选择(可进行筛选),款式(可设置报表标题),可自行设置。设置完后,点击完成。
6.在报表设计器中调整须要显示的数组的位置、宽度等。
7.在窗口中添加代码。
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
DimoRptAsNewCrystalReport1()
DimdsdataSetAsNewDataset1()
DimCNAsNewData.SqlClient.SqlConnection("datasource=PMSERVER;initialcatalog=Northwind;userid=sa;password=sa")
CN.Open()
DimdaOrdersAsNewData.SqlClient.SqlDataAdapter("select*fromorders",CN)
daOrders.Fill(dsdataSet,"orders")
DimdaDetailsAsNewData.SqlClient.SqlDataAdapter("select*from[OrderDetails]",CN)
daDetails.Fill(dsdataSet,"OrderDetails")
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource=oRpt
EndSub
8、运行程序
七、用程序改变报表中text的文本
代码如下:
DimGetTextObjectAsTextObject
'按名称获取ReportObject,将其转换为TextObject,并返回此对象。
GetTextObject=orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text="XXXX系统"
总结:水晶报表具有极其强悍的功能,还可进行导入WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的神器。
(此文部份资料来自MSDN)
Author:李洪根
E-MAIL:lihonggen0@163.com
==================================================================
在我们对VS.Net中的水晶报表(CrystalReports)进行研究之前,我和我同学对怎样将这个复杂的东东加入我们的Web应用有着十分的好奇心。一周之后,在阅读了大量的“HOWTO”文档以后水晶报表文件 rpt 为什么没有类文件 cs,我们成功地将一些简单的报告加入到了我们的Asp.net程序中,并得到了一些小决窍。
这篇文章教你怎样在.NetWeb应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的疗效,读者最好须要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。
简介
水晶报表可以由好多的方式得到,其中一个就是使用VS.Net来创建,它提供了十分丰富模型以使我们能否在运行时操作属性和技巧。假如你正在使用VS.Net开发.Net程序,这么你就不须要再安装其它软件了,由于他早已内嵌在VS.Net中了。
优点:
VS.Net水晶报表有下边一些主要的优点:
快速的报表开发
才能导入成为复杂的交互性图表
可以与其它控件一起在WebForm中使用
才能动态地将报表导入成为.pdf,.doc,xls,html,rtf等多种格式
结构:
一些组件组成了水晶报表的二层结构,须要的Web应用有:
顾客端:
顾客端仅须要一个可以访问嵌入aspx页面报表的游览器就可以了
服务器:
水晶报表引擎(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个用户,为了支持更多的用户,你不得不在中订购许可证。
让我们体会一下----在Asp.net中使用一个现成的水晶报表文件
让我们先体会一下在WebForm中使用水晶报表的觉得。
1)从WebForm工具栏中拖动水晶报表查看器控件(CrystalReportViewer)至.aspx页面中。
2)调出水晶报表查看器控件的属性窗口
3)点击[...]按键查看"DataBinding"属性,并弹出了DataBinding窗口。
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"
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操作系统的缘由。
=======================
命名空间为:usingCrystalDecisions.Shared
privatevoidBuildReportViewerParameters(CrystalDecisions.Web.CrystalReportViewerrptViewer,HashtableParamTable)
//定义报表视图的参数的方式
ParameterFieldsParamFields=newParameterFields();
foreach(objectkeyinParamTable.Keys)
ParameterFieldParamField=newParameterField();
ParameterValuesParamValues=newParameterValues();
ParameterDiscreteValueParamValue=newParameterDiscreteValue();
ParamValue.Value=ParamTable[key].ToString();
ParamValues.Add(ParamValue);
ParamField.ParameterFieldName=key.ToString();
ParamField.CurrentValues=ParamValues;
ParamFields.Add(ParamField);
rptViewer.ParameterFieldInfo=ParamFields
privatevoidBuildReportClassParameters(CrystalDecisions.CrystalReports.Engine.ReportClassrpt,HashtableParamTable)
//定义报表类的参数的方式
foreach(objectkeyinParamTable.Keys)
ParameterValuesParamValues=newParameterValues();
ParameterDiscreteValueParamValue=newParameterDiscreteValue();
ParamValue.Value=ParamTable[key].ToString();
ParamValues.Add(ParamValue);
rpt.DataDefinition.ParameterFields[key.ToString()].ApplyCurrentValues(ParamValues);
protectedvoidBuildReportParameters(CrystalDecisions.Web.CrystalReportViewerrpt,HashtableParamTable)
//定义报表参数的方式
ParameterFieldsParamFields=newParameterFields();
foreach(objectkeyinParamTable.Keys
ParameterFieldParamField;
ParameterValuesParamValues;
ParameterDiscreteValueParamValue;
ParamField=newParameterField();
ParamValues=newParameterValues();
ParamValue=newParameterDiscreteValue();
ParamValue.Value=(string)ParamTable[key];
ParamValues.Add(ParamValue);
ParamField.ParameterFieldName=(string)key;
ParamField.CurrentValues=ParamValues;
ParamFields.Add(ParamField);
rpt.ParameterFieldInfo=ParamFields;
之后再你的须要调用参数的地方,加如下引用:
privatevoidButton_output_Click(objectsender,System.EventArgse
CrystalDecisions.Shared.TableLogOnInfologInfo=newCrystalDecisions.Shared.TableLogOnInfo();//设置报表的登陆信息
logInfo.ConnectionInfo.ServerName="ANGEL";//设置报表与库的联接信息
logInfo.ConnectionInfo.DatabaseName="KaoQin";
logInfo.TableName="Emstatistic";
logInfo.ConnectionInfo.UserID="sa";
logInfo.ConnectionInfo.Password="";
CrystalReportViewer1.ReportSource=Server.MapPath("cr_aa.rpt");//指定报表的数据源
CrystalReportViewer1.LogOnInfo.Add(logInfo);//对参数进行赋什值
//CrystalReportViewer1.DataBind();