[HTML]我们采用下边的几步使用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控件,并设定其属性水晶报表文件 rpt 为什么没有类文件 cs,此处与PULL模式下是一致的。
CodeBehind代码:
10)在Page_Load方式中使用下边的子函数:
VB.Net代码:
SubBindReport()
DimmyConnectionAsNewSqlClient.SqlConnection()
myConnection.ConnectionString="server=(local)/NetSDK;database=pubs;Trusted_Connection=yes"
DimMyCommandAsNewSqlClient.SqlCommand()
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)
1.2.DOC(MSWordDocument)
2.3.XLS(MSExcelSpreadsheet)
3.4.HTML(HyperTextMarkupLanguage–3.2or4.0compliant)
4.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模式一样的了。
[/HTML]
.NET环境下水晶报表使用总结
水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时侯,所有报表都使用水晶报表,其简单、易用和强悍的功能令笔者倍加喜爱,现将水晶报表使用杂记呈现给你们。
一、在使用自带的水晶报表时,请注册,否则只能使用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.在“数据链接属性”对话框中,单击“提供程序”选项卡,之后选择一个提供程序(比如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
本人有如下构想:
1、通过联接查询获得SQL数据库相关数据;
2、置放到DataSet里;
3、调用水晶报表(线形或柱形模板)水晶报表文件 rpt 为什么没有类文件 cs,生成报表;
4、输出生成EXCEL文档。
讨教诸位高手,怎样实现以上思路?(如有范例就更好了)
特别谢谢!
---------------------------------------------------------------
1.在你的工程中添加新項目DataSet,連結數據庫,將须要的數據表或預存程序
推入此DataSet中,編譯DataSet
2.使用Vs.net自帶的CrystalReport,以DataSet為數據源构建報表
3.在程序中將數據掉入此報表中
4.CrystalReport有輸出為Excel的選項,通過程序也可以實現
DimconnAsSqlConnection
DimdaAsSqlDataAdapter
DimstrSQLAsString
conn=NewSqlConnection()
conn.ConnectionString="UserID=sa;PWD=1234;DataSource=xxxx;InitialCatalog=xxxxx"
conn.Open()
strSQL="Select*fromTableName"
da=NewSqlDataAdapter(strSQL,conn)
DimdsAsNewDataSet()
da.Fill(ds,"TableName")
DimRptDocAsNewReportName()
RptDoc.SetDataSource(ds)
'給RptDoc指定數據,
CrystalView1.ReportSource=RptDoc'給CrystalView指定數據
CrystalView1.DataBind()
conn.Close()
5.假如须要顯示的為多表關聯的数组,最好以存儲過程构建DataSet
---------------------------------------------------------------
请参考如下代码:
stringstrconn=联接串;
SqlConnectionmyconn=newSqlConnection(strconn);
stringstrcmd=@"select句子";
SqlCommandmycmd=newSqlCommand(strcmd,myconn);
SqlDataAdaptermyda=newSqlDataAdapter(strcmd,myconn);
DataSetmyds=newDataSet();
myconn.Open();
myda.Fill(myds,"报表名");
报表名myrpt=new报表名();
myrpt.SetDataSource(myds);
this.CrystalReportViewer1.ReportSource=myrpt;
导入到EXCEL:
myrpt.ExportOptions.ExportDestinationType=CrystalDecisions.Shared.ExportDestinationType.DiskFile;
myrpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.Excel;
CrystalDecisions.Shared.DiskFileDestinationOptionsopt=newCrystalDecisions.Shared.DiskFileDestinationOptions();
opt.DiskFileName=@"文件名";
myrpt.ExportOptions.DestinationOptions=opt;
myrpt.Export();
水晶报表9的英文帮助下载:
CrystalReportsforVisualStudio.NET
PictureObject成员请参见
PictureObject类¦CrystalDecisions.CrystalReports.Engine命名空间
公共实例属性
Border(从ReportObject中继承而至)Border。获取Border对象。
Height(从ReportObject中继承而至)Int32。获取或设置以缇为单位的对象高度。
Kind(从ReportObject中继承而至)ReportObjectKind。获取报表对象的类型。
Left(从ReportObject中继承而至)Int32。获取或设置以缇为单位的对象左上角位置。
Name(从ReportObject中继承而至)字符串。获取对象名。
ObjectFormat(从ReportObject中继承而至)ObjectFormat。获取ObjectFormat对象。
Top(从ReportObject中继承而至)Int32。获取或设置以缇为单位的对象底部位置。
Width(从ReportObject中继承而至)Int32。获取或设置以缇为单位的对象长度。
请参见
PictureObject类
ImportsCrystalDecisions.CrystalReports.Engine
DimpicObjectAsPictureObject
picObject=oRpt.ReportDefinition.ReportObjects.Item("picture1")
来自:
你们在基于webform中使用水晶报表时假如简单的根据网上“阿刀”的做法,肯定会提示你:登入失败。
对于这个问题,斑竹我花了整整三天的时间研究水晶报表的帮助文件,总算得到解决方案。
我不是一个保守的人,我相信有好多的网友正和我一样在耗费精力在研究这个问题,我不乐意你们再和我一样白白的耗费精力。
下边是我实现该方案的几个步骤。你们不要着急,渐渐的看下去会对你有很大的帮助。
步骤一:看示例文件
水晶报表自带一个示例文件,数据库是access(不带密码的)。我首先运行示例文件(基于webform和winform)结果显示了正确的报表,正如“飞刀”的示例。
于是,我自己构建了一个报表文件和.aspx文件,结果显示登录失败!而且我把报表文件换成示例的报表文件,不再出错。
问题出在哪些地方?莫非是报表格式文件有关于登录权限的设置?通过跟踪、调试,我对比剖析我的报表文件和示例报表文件,没有发觉任何的不同。看来问题不在报表文件。
是数据库的问题?我构建一个access结果还是登录失败!
不是数据库的问题(我自己的数据库是未带密码的access,帮助中的数据库也是这么)?也不是报表格式文件的问题(我仔细剖析了二者的原代码是相同的)?
这么问题出现在哪些地方?我白思不得其解!
步骤二:找帮助文件
于是我再度求援于帮助。我翻遍了水晶报表的帮助,总算找到“访问安全数据库[C#]”字样,发觉这儿有下边的一段话:
通过CrystalReportsforVisualStudio.NET访问安全数据库的过程在Web窗体和Windows窗体之间有所不同。在Windows窗体中,对话框手动提示用户输入用户名和密码(测试很容易成功)。而在Web窗体中,您须要设计一个表单以从用户获取该信息。对于这两种情况,均可使用代码来指定用户名和密码,因而为应用程序的所有用户提供相同的安全等级。
于是我对同样的数据库(先是用帮助示例中的access数据库,后来用自己完善的access数据库)。发觉对于同一个报表文件,对于winform能显示成功,而对于webform则一直显示登录失败!于是我有点明白里面的意思!
看来问题是出在权限的设置上。
步骤三:研究帮助,总算成功!
在帮助里我找到“设置数据库登陆参数”字样,上面提供了一些后来发觉是十分有用的信息:
下述示例说明怎样将登陆参数传递到报表的表中。该示例使用到某个安全的SQLServer数据库的联接。
启动一个新项目
向窗体添加一个“按钮”和四个“文本框”控件。
将“文本框”控件分别命名为:serverNameTxt、dbNameTxt、userNameTxt和passwordTxt。
双击“按钮”控件以指定Click风波的代码。依据所用语言插入适当的代码。
[C#]