CSDN - 专家门诊 关闭窗口
主 题: 有关水晶报表的使用经验和资料总结,欢迎各位使用过水晶报表的同仁把自己在使用过程中的总结、经验、体会同大家共享!!
作 者: foxtoo (阿里巴巴和四十大盗)
信 誉 值: 100
所属论坛: .NET技术 ASP.NET
问题点数: 0
回复次数: 64
发表时间: 2003-6-10 23:04:39
资料:
Asp.Net中使用水晶报表(上)
www.dotnet8.com 2002-9-6 DotNet吧
[HTML]在我们对VS.Net中的水晶报表(Crystal Reports)醒芯恐埃液臀遗笥讯匀绾谓飧龈丛拥亩尤胛颐堑腤eb应用有着非常的好奇心。一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的Asp.net程序中,并得到了一些小决窍。
这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。
简介
水晶报表可以由很多的方法得到,其中一个就是使用VS.Net来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。如果你正在使用VS.Net开发.Net程序,那么你就不需要再安装其它软件了,因为他已经内嵌在VS.Net中了。
优点:
VS.Net水晶报表有下面一些主要的优点:
快速的报表开发
能够导出成为复杂的交互性图表
可以与其它控件一起在WebForm中使用
能够动态地将报表导出成为.pdf,.doc,xls,html,rtf等多种格式
结构:
一些组件组成了水晶报表的二层结构,需要的Web应用有:
客户端 :
客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了
服务器 :
- 水晶报表引擎(Crystal Report Engine (CREngine.dll))
通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。也正是因为报告引擎的作用,才可以将Asp.Net中的水晶报表转换成为普通HTML格式
- 水晶报表设计器(Crystal Report Designer (CRDesigner.dll))
水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。
- .rpt报表文件
执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了一些现成的.rpt例子。
- Data Source
.rpt文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet,然后再将其传送到报表文件。
- 水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll))
水晶报表查看控件是一个WebForm控件,可以将它看成是一个在.aspx页面中存放报表的容器。 注意:在一些复杂的操作中,报表服务器与Web服务器可能不在同一物理主机上,Web服务器将HTTP请求传送到报表服务器上去。水晶报表也可以当做WebService来执行。
执行模式
水晶报表取数据可以使用下面的方法实现:
- Pull 模式:
被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。
- Push 模式 :
此时开发表不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。
报表类型:
水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象。
- Strongly-typed 报表 :
当你将报表文件加入到项目中去时,它就变成了一个了“ strongly-typed“报表。在这些情况下,你将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。
- Un-Typed 报表 :
这里的报表并不直接包含在项目中,因此称为‘un-typed’ 报表。在这种情况下,你不得不使用水晶报表的”ReportDocuemt“对象建立一个实例,并且”手动“地凋用报表。
其它注意事项
- 尽管水晶报表查看器拥有一些很酷的功能,如缩放、页面导航等。但是他不提供打印功能,你不得不调用游览器的打印功能。
- VS.Net中的水晶报表如果没有注册,那么它只能使用30次,30次后,”保存“功能就不能再使用了。为了避免这个,你不是不在 http://www.crystaldecisions.com/这里注册此产品。 (好像不是这样子的,不注册也好像能用很长的时间,只是不能提供支持)
- 默认安装的水晶报表只能支持5个用户,为了支持更多的用户,你不得不在 http://www.crystaldecisions.com/中购买许可证。
让我们感受一下----在Asp.net中使用一个现成的水晶报表文件
1) 从WebForm工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至.aspx页面中。
2) 调出水晶报表查看器控件的属性窗口
3) 点击[...]按钮查看"Data Binding"属性,并弹出了DataBinding窗口。
4) 从左边的"Bindable属性”区中选择“Report Source”
5) 选中"自定义绑定表达式"单选按钮,在右边的底部的窗口中指定.rpt文件的文件名和路径,例如:"C://Program Files//Microsoft Visual Studio.NET//Crystal Reports//Samples//Reports//General Business//World Sales Report.rpt",然后”确定“
注意:文件”World Sales Report.rpt“文件是在VS.Net安装时创建的。如果你在安装过程中指定了其它目录,此时你最好确认一下路径的正确性。
上面的步骤中实际上是插入了下面这些代码至Asp.Net文件中:
以及:
id="CrystalReportViewer1"
runat="server" Width="350px" Height="50px"
ReportSource=''>
注意:在飞刀我的VS.Net正式版中自动生成的代码中ReportSource产生的样式不是这样子的,它是:
ReportSource=""
这样是错误的,会出现错误信息,有两处错误:
必须按照使用本文介绍的格式来手动修改,这也算是VS.Net的一个Bug吧。
6) 在Page_Load方法中调用DataBind方法。(代码为VB.Net)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
DataBind()
End Sub
7)保存并编译你的页面。 现在,你就有一个内嵌水晶报表的WebForm页面了。
注意:实际开发中,一开始会出现无法访问inetsrv目录的错误,解决的办法是改变其目录的安全属性,使User用户有可写的权限。飞刀我发现.Net系统自已给出的解决方法是没有用的,也可能是我使用的是Windows.Net操作系统的原因。
[/HTML]
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-10 23:04:53 得分:0
Asp.Net中使用水晶报表(中)
www.dotnet8.com 2002-9-6 DotNet吧
[HTML]使用Pull模式
我们将通过下面的这些步骤来通过Pull模式来执行水晶报表
1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。
2.拖放一个 CrystalReportViewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。
3. 在代码中调用DataBind方法。
创建 .rpt 文件:
1) 在右击”解决方案游览器“,在弹出的菜单中选择”添加“--”添加新项“-->”Crystal Report”
2) 在”Crystal Report 库”中选择”作为空白报表“单选按钮,最后单击“确定“。
3)这里将弹出水晶报表设计器。
4) 右击报表中的”详细资料区”,选择“数据库”->“添加/删除数据库..."
5) 在弹出的”数据库专家“中,扩展”OLE DB(ADO)“选项,此时会弹出另外一个”OLE DB(ADO)“窗口。
6) 在 "OLE DB (ADO)" 弹出窗口中,选择 "Microsoft OLE DB Provider for SQL Server" 然后 "Next"
7) 指定连接的信息
服务器 : ASPCN (您的机器是什么名字就写什么)
用户 ID: sa
密码:
数据库 : Pubs
8) 单击”Next“,最后单击”Finish“按钮。
9) 这时你就能在”数据库专家“窗口中看到我们选择的数据库。
10) 扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK"按钮。
11) 现在在”字段资源浏览器“中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。
12) 拖放需要的字段进入报表的”详细资料“区。字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。
13) 保存,这样我们就有了一个水晶报表文件。
创建 CrystalReportViewer 控件
14) 回到前面的WebForm中,拖放一个Crystal Report Viewer控件到页面中去。
15) 调出Crystal Report Viewer控件的属性窗口,选择“DataBindings"区点击[...]
16) ”Crystal Report Viewer 数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑定表达式”中指定.rpt文件路径。
17) 此时你能够从Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览。
注意:在上面的例子中,CrystalReportViewer可以在设计时直接调用真实的数据,因为此时数据已经保存。在这种情况下,设计时当没有保存数据时,他是不能显示数据的。取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。
Code Behind 程序设计
18) 在Page_Load方法中调用DataBind方法。
执行你的程序
19) 创建并运行你的程序!
您现在就可以直接在Web页面中使用水晶报表内置的一些功能,如页面导航,缩放等。
[/HTML]
Asp.Net中使用水晶报表(下)
www.dotnet8.com 2002-9-6 DotNet吧
[HTML]我们采用下面的几步使用Push模式执行水晶报表:
1. 设计一个DataSet
2. 创建一个.rpt文件同时将其指定给上一步建立的DataSet。
3. 在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系。
4. 在代码中访问数据库并把数据存入DataSet
5. 调用DataBind方法。
设计一个DataSet
1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”
2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。
3) 此时在数据集中就会有一个Stores表的结构图。
- .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。
创建 .rpt 文件 :
4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“
6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。
7) 将”Stores"表添加到“选定的表”中,点击“OK”
8) 使用PULL模式下的方法,建立一个WebForm
建立一个Crystal Report Viewer 控件
9) 建立一个Crystal Report Viewer 控件,并设定其属性,此处与PULL模式下是一致的。
Code Behind 代码:
10) 在Page_Load方法中使用下面的子函数:
VB.Net代码:
Sub BindReport()
Dim myConnection As New SqlClient.SqlConnection()
myConnection.ConnectionString= "server= (local)/NetSDK;database=pubs;Trusted_Connection=yes"
Dim MyCommand As New SqlClient.SqlCommand()
MyCommand.Connection = myConnection
MyCommand.CommandText = "Select * from Stores"
MyCommand.CommandType = CommandType.Text
Dim MyDA As New SqlClient.SqlDataAdapter()
MyDA.SelectCommand = MyCommand
Dim myDS As New Dataset1()
'这就是我们在设计模式上使用的DataSet
MyDA.Fill(myDS, "Stores")
'你不得不使用与你前面DataSet相同名字。
Dim oRpt As New CrystalReport1()
' 水晶报表绑定
oRpt.SetDataSource(myDS)
' 设定水晶报表的ReportSource
CrystalReportViewer1.ReportSource = oRpt
End Sub
C#代码:
private void BindReport()
{
string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=";
CrystalReport1 oCR = new CrystalReport1();
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Stores";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"stores");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
注意:在上面的代码中,你得注意一下oRpt是"Strongly Typed"的报表文件。如果你需要使用"UnTyped"报表,你得使用ReportDocument对象,然后再调用报表文件。
运行你的程序。
11) 运行你的程序
将报表文件导出成为其它格式
你能够将报表文件导出成为下列格式:
1. PDF (Portable Document Format)
1. 2. DOC (MS Word Document)
2. 3. XLS (MS Excel Spreadsheet)
3. 4. HTML (Hyper Text Markup Language – 3.2 or 4.0 compliant)
4. 5. RTF (Rich Text Format)
使用Pull模式导出报表
当导出使用Pull模式创建的文件时,水晶报表准确地打开所需要的数据,下面是执行导出功能的代码:
C#代码:
VB.Net代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myReport As CrystalReport1 = New CrystalReport1()
'注意:这里我们建立一个strong-typed的水晶报表实例。
Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()
myReport.ExportOptions.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
' 导出成为其它文件时也需要这个选项
' 如Microsoft Exchange, 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()
'上面的代码将完成导出工作。
End Sub
使用PUSH模式导出水晶报表
当导出的报表是由PUSH模式建立的时,第一步就是通过编程建立连接并组装DataSet,设置报表的的SetDataSource属性。再下面的步骤就有Pull模式一样的了。
[/HTML]
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-10 23:06:08 得分:0
.NET环境下水晶报表使用总结
水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。
一、在使用自带的水晶报表时,请注册,否则只能使用30次
水晶报表注册码
注册号:6707437608
密码:AAP5GKS0000GDE100DS
二、使用CrystalReportViewer进行预览
CrystalReportViewer控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径,也可以是强类型报表。
1. 打开“工具箱”,并将一个 CrystalReportViewer 拖到窗体上,我们命名为rptVew。
2. 通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。
3. 当运行应用程序时,报表将显示在查看器中。
三、创建新报表
1. 指向“添加”,单击“添加新项”。
2. 在“添加新项”对话框中,从“模板”区域选择 Crystal Report,将报表命名为rptClient,单击“打开”。
3. 在 Crystal Report 库中,选择下列选项之一:
· 使用报表专家 — 指导您完成报表的创建过程,并将您的选择添加到 Crystal Report Designer。
· 作为空白报表 — 打开 Crystal Report Designer。
· 来自于现有的报表 — 创建新报表,它与指定的另一报表设计相同。
注意 Crystal Report 库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方法适合您的需要。
4. 单击“确定”按钮。
如果选择使用“报表专家”,便会出现“报表专家”对话框,并带有数据资源管理器。为每个文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,然后单击“完成”来访问 Crystal Report Designer 和您的报表
四、是否需要动态设置数据源?
Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。
拉和推模型
为了向开发人员提供最灵活的数据访问方法,Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。
拉模型
在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。
推模型
相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。
四、从 ADO.NET 数据集制作报表
从数据库创建数据集对象
1. 在项目中新建一个架构文件:
a. 在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。
b. 在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。
c. 在“模板”区域选择“数据集”。
d. 接受默认名称 Dataset1.xsd。
这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。
2. 指定数据库位置:
a. 在服务器资源管理器中,右击“数据连接”并选择“添加连接”。
b. 在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)。
c. 单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。
d. 单击“确定”按钮。
此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。
3. 在解决方案资源管理器中,双击 Dataset1.xsd (如果它尚不是活动视图)。
Dataset1.xsd 现在应显示在“数据集”选项卡中。
4. 若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。
5. 单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。
6. 在“生成”菜单上,单击“生成”为项目生成数据集对象。
ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。
请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添加/删除数据库”。
将报表连接到 ADO.NET 数据集对象
1. 在“数据库专家”中,展开“项目数据”文件夹。
2. 展开“ADO.NET 数据集”文件夹。
3. 选择所需数据集对象。
例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。
4. 选择要向报表中添加的表,和使用其他数据源一样。
五、动态改变数据源的代码
Dim dsdataSet As New DataSet()
Dim oRpt As New rptClient() '已建立的报表rptClient
请读者自行填充数据集dsdataSet
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet.Tables(0))
' 将带有数据的报表对象绑定到 Windows 窗体查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource = oRpt
注意 FillDataSet 方法可连接到指定的数据库,提取数据,然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中,请使用 SQL JOIN 语句将这些表联接在一起;然后在 FillDataSet 方法中指定一个结果表
六、创建主从报表
在报表中,有许多报表是主从表结构,比如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个字段关联起来,这种报表可利用其分组功能实现,
1. 新建一个工程
2. 往FORM1中添加一个CrystalReportViewer控件
3. 在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据库
4. 添加一个数据集Dataset1,将服务器资源管理器中的Orders和 Order Details加入到数据集中。
5. 添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders和 Order Details,“链接”中是关联字段的链接,在“字段”中选择要显示的主表和明细表的字段,组中选择分组依据为Orders表OrdersID字段,总计,图表,选择(可进行筛选),样式(可设置报表标题),可自行设置。设置完后,点击完成。
6. 在报表设计器中调整需要显示的字段的位置、宽度等。
7. 在窗口中添加代码。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim oRpt As New CrystalReport1()
Dim dsdataSet As New Dataset1()
Dim CN As New Data.SqlClient.SqlConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa")
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from orders", CN)
daOrders.Fill(dsdataSet, "orders")
Dim daDetails As New Data.SqlClient.SqlDataAdapter("select * from [Order Details]", CN)
daDetails.Fill(dsdataSet, "Order Details")
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource = oRpt
End Sub
8、运行程序
七、用程序改变报表中text的文本
代码如下:
Dim GetTextObject As TextObject
' 按名称获取 ReportObject,将其转换为 TextObject,并返回此对象。
GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text = "XXXX系统"
总结:水晶报表具有非常强大的功能,还可进行导出WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的利器。
(此文部分资料来自MSDN)
Author:李洪根
E-MAIL:lihonggen0@163.com
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-10 23:07:11 得分:0
本人有如下设想:
1、通过连接查询获得SQL数据库相关数据;
2、置放在DataSet里;
3、调用水晶报表(线形或柱形模板),生成报表;
4、输出生成EXCEL文档。
请教各位大侠,如何实现以上思路?(如有范例就更好了)
非常感谢!
---------------------------------------------------------------
1.在你的工程中添加新項目DataSet,連結數據庫,將需要的數據表或預存程序
拖入此DataSet中,編譯DataSet
2.使用Vs.net自帶的Crystal Report,以DataSet為數據源建立報表
3.在程序中將數據推入此報表中
4.Crystal Report 有輸出為Excel的選項,通過程序也可以實現
Dim conn As SqlConnection
Dim da As SqlDataAdapter
Dim strSQL As String
conn = New SqlConnection()
conn.ConnectionString = "User ID=sa; PWD=1234;Data Source=xxxx; Initial Catalog =xxxxx"
conn.Open()
strSQL = "Select * from TableName"
da = New SqlDataAdapter(strSQL, conn)
Dim ds As New DataSet()
da.Fill(ds, "TableName")
Dim RptDoc As New ReportName()
RptDoc.SetDataSource(ds)
' 給RptDoc 指定數據,
CrystalView1.ReportSource = RptDoc '給CrystalView指定數據
CrystalView1.DataBind()
conn.Close()
5.如果需要顯示的為多表關聯的字段,最好以存儲過程建立DataSet
---------------------------------------------------------------
请参考如下代码:
string strconn=连接串;
SqlConnection myconn=new SqlConnection(strconn);
string strcmd=@"select语句";
SqlCommand mycmd=new SqlCommand(strcmd,myconn);
SqlDataAdapter myda=new SqlDataAdapter(strcmd,myconn);
DataSet myds=new DataSet();
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.DiskFileDestinationOptions opt=new CrystalDecisions.Shared.DiskFileDestinationOptions();
opt.DiskFileName=@"文件名";
myrpt.ExportOptions.DestinationOptions =opt;
myrpt.Export();
Top
回复人: tensun(好想学好.NET) ( ) 信誉:100 2003-6-10 23:15:12 得分:0
水晶报表9的中文帮助 下载:
http://www.ourfly.com/download/download.aspx
Crystal Reports for Visual Studio .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 类
Imports CrystalDecisions.CrystalReports.Engine
Dim picObject As PictureObject
picObject = oRpt.ReportDefinition.ReportObjects.Item("picture1")
Top
回复人: tensun(好想学好.NET) ( ) 信誉:100 2003-6-10 23:17:24 得分:0
来自:http://expert.csdn.net/Expert/topic/1896/1896874.xml?temp=.78677
大家在基于webform中使用水晶报表时如果简单的按照网上“阿刀”的做法,肯定会提示你:登陆失败。
对于这个问题,斑竹我花了整整一天的时间研究水晶报表的帮助文件,终于得到解决方案。
我不是一个保守的人,我相信有很多的网友正和我一样在花费精力在研究这个问题,我不愿意大家再和我一样白白的花费精力。
下面是我实现该方案的几个步骤。大家不要着急,慢慢的看下去会对你有很大的帮助。
步骤一:看示例文件
水晶报表自带一个示例文件,数据库是access(不带密码的)。我首先运行示例文件(基于webform和winform)结果显示了正确的报表,正如“飞刀”的示例。
于是,我自己建立了一个报表文件和.aspx文件,结果显示登陆失败!可是我把报表文件换成示例的报表文件,不再出错。
问题出在什么地方?难道是报表格式文件有关于登陆权限的设置?通过跟踪、调试,我对比分析我的报表文件和示例报表文件,没有发现任何的不同。看来问题不在报表文件。
是数据库的问题?我建立一个access结果还是登陆失败!
不是数据库的问题(我自己的数据库是未带密码的access,帮助中的数据库也是如此)?也不是报表格式文件的问题(我仔细分析了两者的原代码是相同的)?
那么问题出现在什么地方?我白思不得其解!
步骤二:找帮助文件
于是我再次求助于帮助。我翻遍了水晶报表的帮助,终于找到“ 访问安全数据库 [C#]”字样,发现这里有下面的一段话:
通过 Crystal Reports for Visual Studio .NET 访问安全数据库的过程在 Web 窗体和 Windows 窗体之间有所不同。在 Windows 窗体中,对话框自动提示用户输入用户名和密码(测试很容易成功)。而在 Web 窗体中,您需要设计一个表单以从用户获取该信息。对于这两种情况,均可使用代码来指定用户名和密码,从而为应用程序的所有用户提供相同的安全等级。
于是我对同样的数据库(先是用帮助示例中的access数据库,后来用自己建立的access数据库)。发现对于同一个报表文件,对于winform能显示成功,而对于webform则仍然显示登陆失败!于是我有点明白上面的意思!
看来问题是出在权限的设置上。
步骤三:研究帮助,终于成功!
在帮助里我找到“设置数据库登录参数”字样,里面提供了一些后来发现是非常有用的信息:
下列示例说明如何将登录参数传递到报表的表中。该示例使用到某个安全的 SQL Server 数据库的连接。
启动一个新项目
向窗体添加一个“按钮”和四个“文本框”控件。
将“文本框”控件分别命名为:serverNameTxt、dbNameTxt、userNameTxt 和 passwordTxt。
双击“按钮”控件以指定 Click 事件的代码。根据所用语言插入适当的代码。
[C#]
// 声明所需变量。
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
int i = 0;
// 对报表中的每个表依次循环。
for (i=0;i == Report.Database.Tables.Count - 1;i++)
{
// 设置当前表的连接信息。
logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text;
logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text;
logOnInfo.ConnectionInfo.UserID = userNameTxt.Text;
logOnInfo.ConnectionInfo.Password = passwordTxt.Text;
Report.Database.Tables [i].ApplyLogOnInfo (logOnInfo);
}
注意 受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法,但 LogOnInfo.ServerName 和 LogOnInfo.DatabaseName 要保留为空。
于是我仿照这个样子,尝试了一下,出错提示:没有发现TableLogOnInfo 和Report。
后来我发现TableLogOnInfo 是属于CrystalDecisions.Shared 命名空间的成员。于是我添加引用:
using CrystalDecisions.Shared ;
这次问题出现在Report。
Report?这是个什么东西,我查遍了所有的帮助,并没有这个函数或类!
[说真的!这个问题难到了我很长的时间!一直在查找Report到底是个什么东西!水景报表公司也真是的,帮助也不写得详细一点!该打!!!]
最终我终于发现Report只是一个用户定义的对象,不是系统本身的对象。
在我困惑的时候,突然我想,为什么不看看Report后面的DataBase,这是个什么东西,终于问题解决了,在帮助里找到如下信息
ReportDocument oRpt = new ReportDocument();
Report属于DocumentCrystalDecisions.CrystalReports .Engine 类的成员。
修改代码:并添加引用
using CrystalDecisions.Shared ;//负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports .Engine ;//负责解释ReportDocument类private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
oRpt.Load("c://inetpub//wwwroot//exer//pagelet//crystal//cr1.rpt");//修改为你自//己的正确位置
//建立安全信息
//受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法,但 LogOnInfo.ServerName //和 LogOnInfo.DatabaseName 要保留为空
logOnInfo.ConnectionInfo.ServerName = "www";
logOnInfo.ConnectionInfo.DatabaseName = "archives";
logOnInfo.ConnectionInfo.UserID = "sa";
logOnInfo.ConnectionInfo.Password = "123456";
oRpt.Database .Tables [0].ApplyLogOnInfo (logOnInfo);
//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;
}
报表文件终于出现!
哇,我好高兴,禁不住站起来伸了个懒腰!
步骤四:最终的完整版的代码
上面的代码不具有系统可扩充和灵活性。缺点有二:
(1)、数据报表格式文件是采用绝对路径
(2)、数据库访问权限的设置一旦设定,在最终发布是无法修改的,特别是客户的SQL SERVER服务器不可能和你调试的程序环境是一样的
基于这个考虑。引进两个比较好的东西:
(1)、Server.Mappath函数
(2)、读取web.config(本示例同时告诉你如何操作web.config配置文件)
最终修改如下:(完整代码)数据库为sql server2000
using CrystalDecisions.Shared ;//负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports .Engine ;//负责解释ReportDocument类
private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
//获取.rpt文件真实路径
string path1,path2;
path1=Server.MapPath ("//exer//pagelet");
path2=path1+"//crystal//cr1.rpt";
//oRpt.Load("c://inetpub//wwwroot//exer//pagelet//crystal//cr1.rpt");
oRpt.Load (path2);
//从web.config中获取logOnInfo参数信息
string a,b,c,d;
//获取ServerName
a=System.Configuration .ConfigurationSettings .AppSettings ["servername"];
//获取DatabaseName
b=System.Configuration .ConfigurationSettings .AppSettings ["database"];
//获取UserId
c=System.Configuration .ConfigurationSettings .AppSettings ["userid"];
//获取password
d=System.Configuration .ConfigurationSettings .AppSettings ["pass"];
//设置logOnInfo参数
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;
oRpt.Database .Tables [0].ApplyLogOnInfo (logOnInfo);
//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;
}
整个演示的操作过程说明:
1、 在解决方案资源管理器里,你需要存放报表文件处,添加新项:CrystalReport报表,起名为cr1.rpt
2、 在随后出现的“报表专家”中选择数据源时,请务必选择OLE DB,然后根据你的数据库的要求选择响应的驱动引擎:
SQL SERVER:Microsoft OLE DB Provider for SQL server
Access:Microsoft Jet.4.0
3、 输入正确的数据库连接,这一步大家一般的情况下不会出错!
4、 建立数据报表,并保存cr1.rpt文件
5、 打开webform1.aspx。添加crystalreportviewer控件:名称为:CrystalReportViewer1
6、 在webform1.aspx.cs中的page_load事件中添加上面的代码:
(注意:引用千万不要忘了!)
*****************************************************
下面是web.config中与本内容有关的细节
<appSettings>
<add key="servername" value="www"/>
<add key="database" value="archives"/>
<add key="userid" value="admin"/>
<add key="pass" value="123456"/>
</appSettings>
***注意这里的<add key="pass" value="123456"/>是pass,所以他必须与
//获取password
d=System.Configuration .ConfigurationSettings .AppSettings ["pass"];这里
的AppSettings["pass"] 中的"pass"保持一致。 当然名字是可以随便起,但必须一致
*******************************************************************
作者:ydmwy
Top
回复人: tensun(好想学好.NET) ( ) 信誉:100 2003-6-10 23:20:20 得分:0
上面贴子解决了数据库有密码,水晶报表提示:登陆失败的问题!!(如果数据库无密码不存在上述问题!!)
Top
回复人: efyrose(散步的鱼) ( ) 信誉:100 2003-6-11 9:21:37 得分:0
你们都太好了,感动ing。
Top
回复人: chyich() ( ) 信誉:100 2003-6-11 9:50:54 得分:0
up
Top
回复人: wen98091(天蓝瓜子) ( ) 信誉:100 2003-6-11 9:52:22 得分:0
thx
Top
回复人: xhdai1(先锋) ( ) 信誉:100 2003-6-11 11:02:05 得分:0
水晶报表9的中文帮助
http://www.ourfly.com/download/download.aspx
怎么在下载时还要输入登录?请问(tensun)怎么登录用户名密码是什么?
Top
回复人: efyrose(散步的鱼) ( ) 信誉:100 2003-6-11 11:03:32 得分:0
请教一下,为啥我添加了一个dataset,拖入数据库中一个表,然后点生成,在添加一个空白报表,为报表添加数据库时,弹出数据库专家,选择项目数据中的ADO.NET数据集。里边列出了我的DataSet1,然而,点击DataSet1展开他,下一级提示“..未找到项目..”没法往报表中加表中字段,望高手多指教
Top
回复人: fengxin107(追逐彩虹) ( ) 信誉:100 2003-6-11 11:10:14 得分:0
看ing...
Top
回复人: liuketao111() ( ) 信誉:64 2003-6-11 11:38:16 得分:0
请教楼上几位高手,我最近安装了CrystalReport,出现下面的错误,不知道如何处理,请帮助!
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。
编译器错误信息: CS1595: 已在多处定义“CrystalDecisions.Web.CrystalReportViewer”;使用“C:/WINNT/assembly/GAC/CrystalDecisions.Web/9.1.3300.0__692fbea5521e1304/CrystalDecisions.Web.dll”中的定义
源错误:
行 14: <form id="Report" method="post" runat="server">
行 15:
行 16: <CR1:CrystalReportViewer id=crvClient style="Z-INDEX: 101; LEFT: 6px; POSITION: absolute; TOP: 10px" runat="server" Height="1156px" Width="890px" ReportSource='<%# "E:/WorkFiles/Learn/ZC_SuperOA/CRM/ClientReport.rpt" %>'>
行 17: </CR1:CrystalReportViewer>
行 18: </form>
Top
回复人: liuketao111() ( ) 信誉:64 2003-6-11 11:41:40 得分:0
更正:我是说我最近安装使用了CrystalReport 9的版本,结果出现了上述错误,在设计时,预览是正确的
Top
回复人: liuqinyi(宝贝) ( ) 信誉:100 2003-6-11 11:43:41 得分:0
.net中已经把水晶报表集成进来了,不需要安装吧。
Top
回复人: liuketao111() ( ) 信誉:64 2003-6-11 11:47:55 得分:0
.net集成的版本较低,我安装的是中文版本9
Top
回复人: hobo_boy(流浪汉(正在学习Ora0i-9i)) ( ) 信誉:100 2003-6-11 12:20:36 得分:0
up.
Top
回复人: lnok(这也会过去) ( ) 信誉:50 2003-6-11 12:21:28 得分:0
我一直有个问题
怎么样把水晶报表导出为dbf文件,急?
注意:是dbf 文件而不是地pdf文件
Top
回复人: micha_he(不会就学) ( ) 信誉:97 2003-6-11 14:31:20 得分:0
收藏!
Top
回复人: anna_aiya(哎呀) ( ) 信誉:100 2003-6-11 14:44:21 得分:0
请教一下,为啥我添加了一个dataset,拖入数据库中一个表,然后点生成,在添加一个空白报表,为报表添加数据库时,弹出数据库专家,选择项目数据中的ADO.NET数据集。里边列出了我的DataSet1,然而,点击DataSet1展开他,下一级提示“..未找到项目..”没法往报表中加表中字段,望高手多指教
我原来也遇到过这个问题。我是建立了一个DATASET数据集后,编译工程退出。然后再打开工程,设置水晶报表的数据源就可以了
我也不知道这是怎么回事
Top
回复人: Jorcks2002(Jorcks2002) ( ) 信誉:90 2003-6-11 14:57:11 得分:0
我也遇到同样的问题装了cry9.2中文版,CrystalReportViewer9.2的在push的模式下不能用,怪哉!
Top
回复人: kld3000(汪洋) ( ) 信誉:100 2003-6-11 15:19:28 得分:0
收藏先
Top
回复人: ytwxw(wxw) ( ) 信誉:99 2003-6-11 15:32:08 得分:0
请问各位是怎么解决打印的问题的
需要导出后再打印吗?
Top
回复人: greystar(greystar) ( ) 信誉:100 2003-6-11 15:55:23 得分:0
thanks
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-11 16:57:39 得分:0
efyrose(散步的鱼) :
请教一下,为啥我添加了一个dataset,拖入数据库中一个表,然后点生成,在添加一个空白报表,为报表添加数据库时,弹出数据库专家,选择项目数据中的ADO.NET数据集。里边列出了我的DataSet1,然而,点击DataSet1展开他,下一级提示“..未找到项目..”没法往报表中加表中字段,望高手多指教
最有可能的原因是:添加数据集对象后,或事数据集对象更新后,没有从新编译项目,
方法:选择菜单—生成中的“重新生成***”。
若数据集还不存在目前的项目,还可以从“更多数据源”中单击“ADO。NET(XML)”,添加项目以外的数据集。
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-11 17:01:21 得分:0
对于CYR9。0的问题,因为我一直使用的是VS自带的CYR,所以不能回答你们的问题。。。
希望有用过CYR9的同仁,讲一下使用经验。。。。。。
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-11 17:13:25 得分:0
关于CRY打印的问题:
CRY分WINDOWFORM和WEBFORM两种,使用方法有所不同,总起来讲:CRY在WINDOWFORM中提供的功能要比在WEBFORM中的多,包括打印。
在WEB中使用CRY,它自身没有提供打印功能,所以只能使用IE中的打印功能(呵呵,不包括自作的打印控件)。
Top
回复人: ameng_2002(flyfox) ( ) 信誉:105 2003-6-11 19:12:42 得分:0
好同志
Top
回复人: jjstar(北人) ( ) 信誉:96 2003-6-11 20:27:55 得分:0
打个标
Top
回复人: tensun(好想学好.NET) ( ) 信誉:100 2003-6-11 23:49:06 得分:0
我想问个问题:
关于使用ADO。NET数据集生成图表,我希望能动态的生成统计图,即根据我选的字段自动生成统计图(饼图或直方图),应该怎样作??好像如果要生成图,必须先在RPT文件中对图指定好要统计的字段,这样就不能动态实现了啊。。。。。很急啊,有人能帮帮我吗???
Top
回复人: efyrose(散步的鱼) ( ) 信誉:100 2003-6-12 8:28:21 得分:0
anna_aiya(哎呀) foxtoo(阿里巴巴和四十大盗) 先行谢过,。我昨天另外建了一个DataSet就行了。而那个DataSet1我删掉重建也不管用而且也重新生成了。刚才,我又试了一下。这次顺利通过。比较怪
Top
回复人: Jorcks2002(Jorcks2002) ( ) 信誉:90 2003-6-12 9:22:58 得分:0
to;tensun(好想学好.NET)
你可以用dataset.xsd呀,数据是动态的,生成的表也就是动态的了
Top
回复人: zhangbat(jim.) ( ) 信誉:100 2003-6-12 9:37:08 得分:0
楼上的高手们:
怎么在程序运行的时候动态指定水晶报表的统计图样式呀?
比如从柱图转到线图?
Top
回复人: rainlow(彩虹) ( ) 信誉:81 2003-6-12 12:24:03 得分:0
TextObject Itext,Ntext;
//按名称获取 ReportObject,将其转换为 TextObject,并返回此对象。
Itext = rptInt.ReportDefinition.ReportObjects["Text12"] as TextObject;
Ntext= rptInt.ReportDefinition.ReportObjects["Text11"] as TextObject;
if(Itext!=null){ Itext.Text=dr["Rate"].ToString();};}
if(Ntext!=null){ Ntext.Text=dr["DRate"].ToString();}
这是代码,为什么报表中的文本对象不显示值呢?我调试跟踪有的呀
Top
回复人: New_bug(流水) ( ) 信誉:100 2003-6-12 12:33:50 得分:0
支持ing
Top
回复人: wwwcsdncom(wwwcsdncom) ( ) 信誉:100 2003-6-12 15:02:37 得分:0
哪个高手提供一个CYR9.0的下载地址
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-12 21:03:36 得分:0
ADO记录集和水晶报表 40Star(原作)
关键字 水晶报表 ADO TTX
在使用水晶报表时,经常会感到数据不是很好控制,最后只好使用这个终极绝招咯。那就是使用数据定义文件(TTX),把得到的ADO记录集传送给水晶报表。
通常情况下,水晶报表是从物理的数据库上创建出来的,但是现在有了32位的Active Data Driver-- P2smon.dll,水晶就可以不用再事先连接到一个数据库上咯。
首先,需要创建一个TTX文件,进入数据源选择窗体后,如下图选中
再单击了前面的“+”后弹出数据源窗体
此时,我们使用“New”按钮创建一个新的数据定义文件(TTX),格式如下
保存后,我们打开这个文本文件,就会发现TTX文件的格式,原来中间是TAB分割符来的。
接着,我们就按照水晶报表的老套路画式样,剩下的就是传递记录机集了。
下面,我们要声明好传递ADO记录集需要的Api,
Public Declare Function PEOpenEngine Lib "crpe32.dll" () As Integer
Public Declare Function PEGetErrorCode Lib "crpe32.dll" (ByVal printJob As Integer) As Integer
Public Declare Function PEOpenPrintJob Lib "crpe32.dll" (ByVal RptName As String) As Integer
Public Declare Function PEOutputToWindow Lib "crpe32.dll" ( _
ByVal printJob As Integer, _
ByVal Title As String, _
ByVal Left As Long, _
ByVal Top As Long, _
ByVal Width As Long, _
ByVal Height As Long, _
ByVal style As Long, _
ByVal PWindow As Long) As Integer
Public Declare Function PEOutputToPrinter Lib "crpe32.dll" ( _
ByVal printJob As Integer, _
ByVal nCopies As Integer) As Integer
Public Declare Function PEStartPrintJob Lib "crpe32.dll" ( _
ByVal printJob As Integer, _
ByVal WaitOrNot As Integer) As Integer
Public Declare Function PEClosePrintJob Lib "crpe32.dll" (ByVal printJob As Integer) As Integer
Public Declare Sub PECloseEngine Lib "crpe32.dll" ()
Public Declare Function CreateFieldDefFile Lib "p2smon.dll" ( _
lpUnk As Object, ByVal _
fileName As String, _
ByVal bOverWriteExistingFile As Long) As Long
Public Declare Function vbEncodelPtr Lib "p2smon.dll" (x As Object) As String
Public Declare Function SetActiveDataSource Lib "p2smon.dll" ( _
ByVal printJob As Integer, _
ByVal tableNum As Integer, _
x As Object) As Long
最后给出的是报表的打印代码
Dim Job As Integer
Dim Handle As Integer
'打开打印引擎
Handle = PEOpenEngine
'水晶的错误处理
If Handle = 0 Then
ErrorNum = PEGetErrorCode(Handle)
MsgBox "打印引擎出错!"
MsgBox "错误代号:" & ErrorNum
End If
'打开打印作业
Job = PEOpenPrintJob(App.Path & "/New.rpt")
'水晶的错误处理
If Job = 0 Then
ErrorNum = PEGetErrorCode(Job)
MsgBox "打开作业New.rpt 失败!"
MsgBox "错误代号:" & ErrorNum
End If
'给水晶报表传送ADO记录集,AdoRecordset的生成就不再多说了
Handle = SetActiveDataSource(Job, 0, ADOrs)
'输出到打印预览窗口
Handle = PEOutputToWindow(Job, "New.rpt", 0, 0, 520, 520, WS_MAXIMIZE, 0)
‘直接输出到打印机
Handle = PEOutputToPrinter(Job,1)
'水晶的错误处理
If Handle <> 0 Then
Handle = PEStartPrintJob(Job, True)
If Handle <> 0 Then
MsgBox "打印完毕"
Else
ErrorNum = PEGetErrorCode(Job)
MsgBox "打印失败!"
MsgBox "错误代号:" & ErrorNum
End If
Else
ErrorNum = PEGetErrorCode(Job)
MsgBox "无法输出到窗体或打印机"
MsgBox "错误代号:" & ErrorNum
End If
'关闭打印作业
PEClosePrintJob (Job)
'关闭打印引擎
PECloseEngine
我使用的是VB6+水晶报表8.5,感觉这种方式比较灵活好用,同时解决了水晶报表补空行的问题。
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-12 21:09:53 得分:0
关于如何实现打印的问题:
private void Button1_Click(object sender, System.EventArgs e)
{
string printername;
printername=this.TextBox1 .Text .Trim ();
//oRpt.PrintOptions .PrinterName ="hp laserjet 6l";
oRpt.PrintOptions .PrinterName=printername;
oRpt.PrintToPrinter (1,false,1,1);
}
这里的oRpt请大家参见我发表的关于登陆错误的帖子(这是一个全局变量)
关于如何实现打印预览的问题:
private void ButtonPreview_Click(object sender, System.EventArgs e)
{
CrystalReportViewer1.ReportSource = oRpt;
}
关于CrystalReportViewer1 、oRpt请大家参见我发表的关于登陆错误的帖子(这是一个全局变量)
关于打印只能在服务器上执行的问题
?程序原理:
客户在浏览器终端执行我的print.aspx页面上的“打印”按扭,执行打印命令。客户可以根据客户本地打印机的名称,在打印机名称的文本框里输入自己的打印机名,并且打印任务应该在客户端的打印机上执行。
可实际上却不是按照上述的要求执行的。
如果客户端的打印机名称(例如hp5000)和.rpt报表格式文件中设置的打印机的名称(如hp laserjet 6l)不一致,系统会出错,提示找不到打印机。在打印时我是让用户根据自己的计算机
如果客户端的打印机名称(例如hp5000)和.rpt报表格式文件中设置的打印机的名称(如hp5000)相同,客户在客户端执行打印任务。可是却是在服务器端的打印机上则成功执行打印任务,客户端的打印机却丝毫没有反映(按理是应该在客户端的打印机上执行)。
取自:http://www.aspx.cn/club/forum.asp?Forum_ID=3
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-12 21:20:03 得分:0
水晶报表的使用:
http://www.aspxcn.com/dotnetbbs/Good.aspx?fbId=23
Top
回复人: derek() ( ) 信誉:99 2003-6-13 8:59:56 得分:0
收藏
Top
回复人: liuyong_lll(孤醉) ( ) 信誉:99 2003-6-13 14:05:52 得分:0
收藏
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-13 22:45:15 得分:0
Crystal Reports 9 .NET 安装
• Crystal Reports 9 将其功能整合到了 Visual Studio .NET 集成开发环境 (IDE) 中,从而增强了 Visual Studio .NET (VS .NET) 的开发效能。因此,在安装 Crystal Reports 9 之前必须先安装所有 .NET 产品,否则,在每安装一个 .NET 产品后都必须重新运行 Crystal Reports 9 或 Report Application Server 9 (RAS) 安装程序。(ADAPT 87307)
下面是一个示例安装顺序:
1. 如果想使您的开发机器能够承载 Web 应用程序,则应确保安装 Internet Information Server (IIS) 5 或者更高版本。如果您正在 Windows NT 4 上安装,您将无法在您机器的 IIS Web 服务器上创建 Web 应用程序;当在 Visual Studio .NET 中创建 Web 应用程序时,您需要指向 Win2000 或者 Windows .NET 服务器。有关详细信息,请参见 Visual Studio .NET 文档。
2. 安装 Visual Studio .NET 2002。
3. 安装 .NET 移动控件 SDK。
4. 安装 Crystal Reports 9。
5. 安装 Report Application Server 9。
我们极力建议您在安装 Crystal Reports 9 后从 RAS 9 安装程序中至少安装 Report Application Server 9 软件开发工具包 (RAS 9 SDK),因为有些 VS .NET 2002 功能依赖于 RAS 9 SDK。大多数演示 Crystal Reports 9 和 RAS 9 新功能使用的代码示例在 RAS 9 的示例中提供。
• 从 Visual Studio .NET 卸载 Crystal Reports 9 之后,.NET 的 Crystal Reports 组件可能工作不正常。要恢复功能,您应该在 .NET 安装程序中运行修复功能。(ADAPT 89415)
• 如果安装了 Crystal Reports 9 然后选中“Crystal Reports for Visual Studio .NET”选项重新运行 Visual Studio .NET 2002 (VS .NET 2002) 的安装,您会遇到一些问题。在工具箱中将同时包含 Crystal Reports 9 和 VS .NET 2002 控件,但是 VS .NET 2002 将控制代码的生成、作为 Web 服务发布等等。要使 Crystal Reports 9 重新获得对 IDE 的控制,您需要在修复模式下重新运行 CR9 安装。若要正确降级为不带 Crystal Reports 9 的 VS .NET 2002,请卸载 CR9 并在修复模式下重新运行 VS .NET 2002 安装。(ADAPT 90314)
• 当未检测到 .NET 框架或 Visual Studio .NET 时,相关的安装功能会被禁用以免意外选中。如有必要,您可在启动 setup.exe 时在命令行定义公共属性 SHOWALLFEATURES=1 来覆盖此行为 (ADAPT 59029)。
• 服务器资源管理器中“Crystal Services”下的服务器文件节点不再与 ServerFileReportManager.asmx 的 Web 服务进行通讯。相反,它与指定机器上的 Report Application Server 的本地连接管理器联系。要使服务器文件节点工作,必须在指定的机器上运行 Querysrv.exe。
同样,服务器资源管理器中的“Crystal Enterprise”节点不再与 EnterpriseReportManager.asmx 的 Web 服务通讯。现在,它通过 Enterprise Bus ebus-3-3-2.dll 直接与 Crystal Enterprise APS 通讯。(ADAPT 87302)
有关更多信息,请参见知识库文章:
http://support.crystaldecisions.com/kbase/c2010319.asp。
• 如果您已使用了随 Visual Studio .NET 2002 一起提供的 ServerFileReportService.asmx Web 服务,您可继续使用该服务,但它不能在报表部件导航之类的新功能中使用。尽管 Crystal Reports 9 Windows 窗体和 Web 窗体 CrystalReportViewer 控件也许能够与旧的 Visual Studio .NET 2002 ServerFileReportService.asmx 一起使用,但这种配置是不受支持的。不过,Crystal Reports 9 ServerFileReportService.asmx 被设计为能够在由 Visual Studio .NET 2002 中旧的 CrystalReportViewer 控件创建的客户端应用程序中使用。
要升级 Web 服务器以使用新的 Crystal Reports 9 ServerFileReportService.asmx,请使用“Internet Information 服务”配置工具将虚拟目录“/CrystalReportWebFormViewer”映射到:
"C:/Program Files/Common Files/Crystal Decisions/2.0/crystalreportviewers"
(或产品安装中的相应目录)。
在 Crystal Reports 9 中,ServerFileReportManager.asmx 和 ServerFileReportService.asmx Web 服务仍默认安装到“C:/Program Files/Microsoft Visual Studio .NET/Crystal Reports/Samples/Reports”目录。若要更改,请修改“C:/Program Files/Common Files/Crystal Decisions/2.0/crystalreportviewers”中的文件 web.config,添加 <configSections> 和 <crystalDecisions> XML 节点。
下面是一个 web.config 文件示例,其中将服务器文件目录树的根设为 c:/inetpub/wwwroot:
<configuration>
<configSections>
<sectionGroup name="crystalDecisions">
<section name="serverFileReportManager"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089, Custom=null" />
</sectionGroup>
</configSections>
<system.web>
<!-- DYNAMIC DEBUG COMPILATION
将 debugmode enable 设为“true”启用 ASPX 调试。然而,将该值设为“false”将会提高该应用程序的运行时性能。
-->
<compilation debug="true">
<assemblies>
<add assembly="System.Xml, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.2.3300.0, Culture=neutral,
PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.Shared, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=9.2.3300.0, Culture=neutral,
PublicKeyToken=692fbea5521e1304"/>
<add assembly="CrystalDecisions.Web, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</assemblies>
</compilation>
<!-- APPLICATION-LEVEL TRACE LOGGING
应用程序级跟踪功能会为应用程序内的每一页生成跟踪日志输出。
将 trace enabled 设为“true”可启用应用程序跟踪日志记录。如果 pageoutput 设置为“true”,
跟踪信息会显示于每页的底部。如果未显示,您可从 Web 应用程序根部浏览“trace.axd”页来查看应用程序跟踪日志。
-->
</system.web>
<crystalDecisions>
<serverFileReportManager>
<add key="rootDirectory" value="c:/inetpub/wwwroot" />
</serverFileReportManager>
</crystalDecisions>
</configuration>
(ADAPT 87302)
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-13 22:45:37 得分:0
• 安装完 Crystal Reports 9 之后,如果您自定义工具箱并进入 .NET 框架组件,可能会遇到以下错误:
“下列程序集是已安装的 SDK 程序集,但未能在自定义工具箱对话框中显示,因为它们缺少一个或多个组件。请确保所有必要的库都可用。CrystalDecisions.web.mobile.dll”
此错误仅在未安装移动组件时发生。(ADAPT 81046)
• 有些 Crystal Reports .NET 的功能依赖于 Report Application Server (RAS) SDK。例如,如果您在 .NET WebForms 查看器中超级链接到另一个报表对象,而且您在“报表 URI”字段中指定一个“ras://”路径,.NET WebForms 查看器将依赖于 RAS SDK。如果未安装 RAS SDK,将出现如下错误消息:
Enterprise Report Application Server 未找到。确保您已指定了一个 EnterpriseSession。
若要安装 RAS SDK,运行 Report Application Server 9 安装程序,选择自定义安装并选中“Report Application SDK”。如果 RAS 服务器的安装和运行不在同一台机器进行,需要将您的默认 ReportAppServer 指向另一台机器;有关详细信息,请参见“Report Application Server (RAS) 的安装”。
• 当您启动 VS .NET IDE 时,在 VS .NET 中加载“VsRptDesigner”程序包或“Crystal Reports 工具”程序包时将会出现“程序包加载失败”。为解决这个错误,您必须以具有管理员权限的帐户或非漫游配置文件的帐户运行 VS.NET。这个问题是由 VS.NET IDE 从 ::CryptAcquireContext() 中获取一个加密服务提供程序时失败所引起的。
• 在一个 Windows 操作系统中,.rpt 文件中的货币、日期和数字未按您所希望的区域设置格式化。若要解决此问题,有两种选择:
- 在本地化的操作系统 (OS) 中运行 IIS。例如,在日语操作系统中,SYSTEM 帐户的用户默认区域设置为 1041 = 日语,所以日语的日期和货币可正确显示。
- 在“user”和“Administrator”组中创建一个“UserJapanese”帐户,并将“IIS 管理服务”、“FTP 发布服务”、“简单邮件传送协议服务”和“World Wide Web 发布服务”设置为在“UserJapanese”下运行。此帐户必须在“Administrator”组中,并需使用“本地安全策略”Applet 添加如下额外的用户权利:
• 作为操作系统的一部分
• 生成安全审计
• 作为服务登录
• 替换进程级标记
发生此问题的原因是 aspnet_isapi.dll 调用了 CreateProcessAsUser() 来创建 aspnet_wp.exe 这一运行 .NET 代码的辅助进程。然而,CreateProcessAsUser() 使得 aspnet_wp.exe 中的 HKEY_CURRENT_USER 注册表配置单元指向与 inetinfo.exe 用户相同的(在英文操作系统中为 1033(英语)的 SYSTEM 帐户)配置单元。
• Crdb_adoplus.dll 不能按需安装。出现以下错误消息:“加载数据库信息失败”。
此问题在按需安装了 ADO.NET 的情况下典型和自定义安装 Crystal Reports 时均会发生。在这些情况下, crdb_adoplus.dll 只能按需安装(也就是说,当数据资源管理器的项目数据被扩展时)。如果您想加载并运行一个使用 crdb_adoplus.dll(一个 ADO .NET 数据集应用程序)的应用程序,该应用程序将无法找到动态链接库 (DLL)。
可使用以下两种方法之一来解决此问题:
- 进入数据资源管理器并展开项目数据。这将按需安装 DLL。
- 进入 Crystal Reports 设置,并进入添加/删除,展开 Data Access。选择将 ADO.NET 安装到硬盘驱动器。
• Crystal Reports 9 文档的 .NET SDK 部分中包含一个介绍部署 Crystal Reports .NET 运行时的章节。以下列出的合并模块是必需的文件:Managed.msm、Database_Access.msm、Database_Access_enu.msm 和 regwiz.msm。您可能会发现您的机器上已存在以这些文件名命名的文件,但这些文件很可能是通过随 Visual Studio .NET 一起提供的上一版本 Crystal Reports .NET SDK 安装的。要获得这些文件对应于 Crystal Reports 9 的文件版本,请访问 Crystal Care 技术支持 Web 站点:http://support.crystaldecisions.com/updates/。进入该 Web 站点后,在“Select a product”(选择一个产品)中选择“Crystal Reports”,在“Select a product version”(选择一个产品版本)中选择“9”,在“Select a file type”(选择一个文件类型)中选择“Product update”(产品更新),然后单击“Go”搜索合并模块。
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-13 22:52:15 得分:0
我们的支持网站:http://support.crystaldecisions.com。
有关详细信息,请访问我们网站的:
Crystal Reports 产品新闻
http://china.crystaldecisions.com/products/crystalreports/
Crystal Reports 演示
http://www.crystaldecisions.com/products/crystalreports/showme/
Crystal Enterprise 产品新闻
http://china.crystaldecisions.com/products/crystalenterprise/
产品信息
http://china.crystaldecisions.com/products/
开发人员社区
http://www.crystaldecisions.com/products/dev_zone/
联机支持、示例和技术简报
http://support.crystaldecisions.com
培训及咨询
http://china.crystaldecisions.com/services/
Crystal Decisions 主页
http://china.crystaldecisions.com
Top
回复人: sunqcn() ( ) 信誉:98 2003-6-14 13:36:55 得分:0
中国一定能够强大,因为中国有很多像搂主这样的人。
Top
回复人: youngby(诗人&SQL&NET ) ( ) 信誉:100 2003-6-14 13:41:06 得分:0
up
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-14 22:24:13 得分:0
大家有什么好的心得,经验,例子,都可以贴的啊,因为关于CRY的例子,和文章比较少,而关于这方面的问题又比较多,希望大家都能把成功的经验贴出,这样可以使很多人少走弯路。。。。。谢谢。。。!!!
Top
回复人: waterf() ( ) 信誉:22 2003-6-16 16:38:50 得分:0
up
Top
回复人: AmaomaoA() ( ) 信誉:100 2003-6-16 20:12:54 得分:0
.NET中水晶报表的数据访问策略
第一种方法,Crystal Report引擎从与之关联的数据源中抽取数据。Crystal Report可以用业界标准OLE DB或者ODBC驱动来联接数据库,它也可以使用其它的特殊驱动(包含在程序包中)来查询Excel工作簿或者Access数据库。开发者可以启动内置向导,选择用来抽取数据的数据源,然后选择报表中的表格和字段。由于上述过程在程序设计时就完成了,所以用户无需在程序运行时为报表获取数据做其它工作。
“推”方法是报表访问数据的另一种方法。在这种方法中,开发者在报表设计阶段为报表正常建立表格和字段。开发者建立一个数据集,该数据集在程序运行时存在,并被传递到报表中;这与在第一种方法中用代码固定数据源大相径庭。如果在.NET项目中用到了指定类型(typed)数据集,开发者就可以把这种数据集做为模型嵌入到报表中的表格定义中。在运行时,开发者只需填充数据集并通过SetDataSource 方法把填充后的数据集传到报表中即可。
可以访问SetDataSource 方法的对象有两种。ReportDocument类是报表本身的封装;它把SetDataSource 作为一个方法加以访问。如果你的数据集包含了所有的表格并且它们与报表中的定义相吻合,那么你应该通过报表对象来调用SetDataSource 。通过报表对象同时也访问数据库属性,该数据库拥有表格集合。Table类同样也有SetDataSource 方法。你可以通过检索适当的表格、调用SetDataSource ,并传递数据集中适当记录的方法直接填写报表表格。
这两种方法的选择并不是互斥的,开发者可以在同一个报表中混合使用它们,这样就使得Crystal Report引擎在程序运行时从不同数据源抽取数据成为可能。但是考虑到这两种方法各自的局限性,你必须决定使用其中的一种或者全部。
Top
回复人: carrel(末关) ( ) 信誉:100 2003-6-17 13:47:07 得分:0
up
Top
回复人: letian(你快乐,所以我快乐) ( ) 信誉:105 2003-6-17 17:43:00 得分:0
请教一下各位有关打印报表的问题,THx
用以下代码实现打印,为何提示:无效报表文件路径
string printername;
oRpt.PrintOptions.PrinterName ="hp laserjet 6l";
oRpt.PrintToPrinter (1,false,1,1);
Top
回复人: tensun(好想学好.NET) ( ) 信誉:100 2003-6-17 22:50:52 得分:0
up
Top
回复人: flying_sunny(帥) ( ) 信誉:98 2003-6-19 14:06:38 得分:0
我最近用水晶报表遇到一问题,请教过同事,都不知怎么了
是这样的
Top
回复人: flying_sunny(帥) ( ) 信誉:98 2003-6-19 14:10:40 得分:0
是样的,在webform1中绑定一报表
在page_load中写如一代码
CrystalReportViewer1.ReportSource = "../应用程序位置/报表名"
CrystalReportViewer1.DataBind()
编译运行提示:
“/TestHuang”应用程序中的服务器错误。
--------------------------------------------------------------------------------
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[NullReferenceException: 未将对象引用设置到对象的实例。]
CrystalDecisions.Web..get_7()
CrystalDecisions.Web.CrystalReportViewer.OnInit(EventArgs e)
System.Web.UI.Control.InitRecursive(Control namingContainer)
System.Web.UI.Control.InitRecursive(Control namingContainer)
System.Web.UI.Control.InitRecursive(Control namingContainer)
System.Web.UI.Page.ProcessRequestMain()
我试过很多方式都不行,找不到问题,高手帮忙看看吧,在这里多谢多谢多谢了!
Top
回复人: yuetong(需要交流) ( ) 信誉:100 2003-6-20 8:20:36 得分:0
flying_sunny(帥) :应该是你的位置没有写对!请仔细检查路径,并且/一定改为//
Top
回复人: yuetong(需要交流) ( ) 信誉:100 2003-6-20 8:20:49 得分:0
flying_sunny(帥) :应该是你的位置没有写对!请仔细检查路径,并且/一定改为//
Top
回复人: yanghai0437(流浪者) ( ) 信誉:99 2003-6-20 15:47:30 得分:0
分组样式的报表怎样设计(用水晶报表)
例如:
班组 | 工号 | 合格数 | 合格率
-----|-------|--------|-------
| shu59 | 102273 | 98.85%
| ------|--------|-------
A 组 | shu79 | 97977 | 98.77%
| ------|--------|--------
| shu43 | 234234 | 96.30%
-----|-------|--------|--------
A组合计 | 2342344| 98.44%
-------------|--------|--------
| shu67 | 102273 | 98.85%
| ------|--------|-------
B 组 | shu45 | 97977 | 98.77%
| ------|--------|--------
| shu42 | 234234 | 96.30%
-----|-------|--------|--------
B组合计 | 2323444| 92.44%
_____________|________|________
两组合计 | 362344 | 94.44%
_______________________________
Top
回复人: wenejiang(伊麦龙) ( ) 信誉:99 2003-6-20 16:03:36 得分:0
我觉得应该开一个水晶报表的专题,否则这里就要太长了
我也有很多问题要问的,比如,水晶报表怎么发布给客户使用呢?是vs.net里的水晶报表!
Top
回复人: foxtoo(阿里巴巴和四十大盗) ( ) 信誉:100 2003-6-20 22:00:48 得分:0
to: yanghai0437(流浪者)
分组合计,直接使用报表专家就可以实现,详细步骤应该看前面。
to:all
通过这些天使用水晶报表,越来越感到它的功能强大,和组合的灵活性,也正因为这样,才照成使用时的复杂性:不同的操作步骤,不同的环境,不同的条件,不同的组合。。。。都有可能造成运行时的失败。。。。
所以,建议大家在出错后,不要灰心,要多调试,仔细找出错误的原因,这也就是我开此贴的目的,你找出的每一个错误,运行出现的每个异常,都有可能出现在别人的机器上,希望能把它讲出来。。。。
我相信每个作过水晶报表的同仁,都遇到过这样那样的问题,解决这些问题之时,就是我们发挥水晶报表强大功能之日。
Top
回复人: cer(培训楼) ( ) 信誉:98 2003-6-21 8:48:26 得分:0
十分好贴收藏
Top
回复人: xiaoyq(xiaoyq) ( ) 信誉:88 2003-6-21 10:58:07 得分:0
我在几个系统中都使用了水晶报表,但一直没有解决打印问题(在webform中)。
有谁有好的解决办法吗?
Top
回复人: yylAlyy(yyl) ( ) 信誉:100 2003-6-23 8:58:13 得分:0
up!
感谢!
很感谢!
非常感谢!
Top
回复人: hzsummer(卖女孩的小火柴) ( ) 信誉:100 2003-6-23 9:46:39 得分:0
非常之好!