爱收集资源网

魔幻水晶报表,HTML Stores模式解密

网络整理 2023-09-27 15:05

[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

水晶报表文件 rpt 为什么没有类文件 cs_报表的文件类型只有rep_水晶报表子报表数据源

密码: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#]

水晶报表文件 rpt 为