.NET环境下水晶报表使用总结(转)

熙风 2013-12-19 11:20:07
加精
刚看到一个比较全面的.NET环境下水晶报表使用方法,觉得还不错

想要在.aspx文件中使用水晶报表
1.先新建文件webform1.aspx 在页面拖入组件CrystalReportViewer 生成代码

2.在项目的同个文件夹中新建文件crystalreport1.rpt? 在字段资源管理器的数据库字段“添加数据库” 请使用oledb连接 从而选择你所要在报表中显示的数据表(有向导)

3.在webform1.aspx.cs主要代码如下:

protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1; 
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
ReportDocument oRpt = new ReportDocument();
string RptDir="f:\\bbs\\test\\crystal\\crystalreport1.rpt"; //crystalreport1.rpt文件所在的绝对路径
oRpt.Load(RptDir);


//设置logoninfo参数,注意这里如果不设?编译时最容易出现“登陆失败”的错误!
logOnInfo.ConnectionInfo.ServerName = "服务器名";
logOnInfo.ConnectionInfo.DatabaseName = "数据库名";
logOnInfo.ConnectionInfo.UserID = "用户名";
logOnInfo.ConnectionInfo.Password = "密码";
oRpt.Database.Tables [0].ApplyLogOnInfo(logOnInfo);

//建立.rpt文件与crystalreportviewer文件之间的连接
CrystalReportViewer1.ReportSource=oRpt;
}


4.//生成pdf文档 在以上代码中加入

 ExportOptions crExportOptions=new ExportOptions(); 
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="f:\\bbs\\test\\crystal\\crystalreport1.pdf";
crExportOptions=oRpt.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat ;

orpt.export();
oRpt.Close();


5.//读取报表导出的内容并传到客户端?继续加入以下代码
Response.ClearContent(); 
Response.ClearHeaders ();
Response.ContentType ="application/pdf";
Response.WriteFile("f:\\bbs\\test\\crystal\\crystalreport1.pdf");

Response.Flush();
Response.Close();


上一次自己做了直接在rpt文件里使用oledb连接使用数据库的方法 但是不是很灵活 这次做了使用sql语句直接生成dataset做为报表的数据源(即push模式),这样就可以接受参数了。当然报表有设置参数的功能 这方面我还没有详细研究

一.sql语句中没有使用表的相互关联(简单的查询语句)
设计一个DataSet
1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”
2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)
3) 此时在数据集中就会有一个Stores表的结构图。xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面
创建一个.rpt文件crystalreport1.rpt同时将其指定给上一步建立的DataSet。
4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“
6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。
7) 将”Stores"表添加到“选定的表”中,点击“OK”
8) 建立一个WebForm1.aspx 拖入一个Crystal Report Viewer 控件
9)
WebForm1.aspx.cs
ReportDocument oRpt = new ReportDocument();
string RptDir="f:\\bbs\\test\\crystal\\crystalreport1.rpt";
oRpt.Load(RptDir);

...//根据sql语句得到DataSet 这个就不多说了

oRpt.SetDataSource(ds);
CrystalReportViewer1.ReportSource=oRpt;

//注意push模式用不到设置logOnInfo参数




举个简单的例子:
员工表(员工编号 员工姓名 部门编号)
部门表(部门编号 部门名称)

要求是: select 员工表.员工姓名,部门表.部门姓名 from 员工表,部门表 where 员工表.部门编号=部门表.部门编号

操作步骤(列举几个比较重要 也是自己当时操作比较容易困惑的地方)
1.建xsd文件 直接拖入员工表和部门表 不要做任何字段关联
2.建rpt文件 选择员工表和部门表后 建立链接 员工表的部门编号---〉部门表的部门编号
3.建.aspx文件 拖入报表控件
4.在.aspx.cs中建立一个DataSet,里面是两张表,名称分别是员工表、部门表(和拖入XSD的名称保持 一致)
sql语句分别为:
select * from 员工表
select * from 部门表


最近一直忙于关于生产计划管理系统的开发,所以很少在这里留言,请各位见谅!还好项目已经进入测试最后阶段,由于项目中对报表的处理使用了水晶报表,加上有很多朋友都留言讲述自己在使用水晶报表开发过程中遇到的问题,所以这次我写了些使用水晶报表的技巧,供大家参考(纯属个人经验,不对处请指正)。

其实在我以前的3篇帖子中基本上对使用水晶报表遇到的问题如何处理做了讲述,这里就不再重复,大家可以看我以前的帖子。这里主要讲一下使用视图解决在报表中的多表关联问题。

往往在报表中要用到多张表的多个字段,如果在rpt文件里进行关联会感觉很烦而且到最后连自己都搞不清了。建议在数据库中建立相应的视图,这样的话就省掉不少麻烦而且不容易出错。

1.在数据库中建立视图。
2.直接把视图拖入数据集文件view.xsd,生成数据集。
3.建立rpt文件,在ADO.NET数据源中选择刚刚建立的dataset。
4.建立.aspx文件 拖入报表控件。
5.在.aspx.cs中声明并实例化在第2步建立的数据集, view v = new view();
这里要用到SQL语句了,不过也很简单,把视图里的sql语句拷贝过来就可以了,如果你要加进行筛选的话加入条件就可以了;
然后对 v 进行填充数据 sqlDataAdapter1.Fill(v,"视图名称");
最后把 v 绑定到rpt文件

有时大家在做报表的时候会碰到做一些汇总表及明细表,并且客户会要求在看汇总表的时候可以看到相

应的明细表,大家很快会想到子报表,不错使用子报表能够到达这样的效果,但由于现系统中的汇总表

和明细表是2个查询页面,所以就没有使用子报表的方案,而是使用对汇总报表中的各个记录使用超链

并传参数的方法来解决的,下面就简单介绍一下具体的方法:


1.报表当然是通过reportview来呈现;

2.让呈现的汇总报表中的记录带上超链接,链接到这条记录所对应的明细报表(看效果图),这就是本

贴所要讲述的重点;


http://images.cnblogs.com/cnblogs_com/zsww/5-2.jpg

http://images.cnblogs.com/cnblogs_com/zsww/5-3.jpg

使用水晶报表自带的格式化编辑器就能很快解决这个问题(当然各位可能还有其他的好办法);
具体做法请看图解;

http://images.cnblogs.com/cnblogs_com/zsww/5-1.jpg

其实,格式化编辑器还有很多功能,还望能和大家一起学习!







水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。

一、在使用自带的水晶报表时,请注册,否则只能使用30次


二、使用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 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。
拉模型

四、从 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


用程序改变报表中text的文本
Dim GetTextObject As TextObject
' 按名称获取 ReportObject,将其转换为 TextObject,并返回此对象。
GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text = "XXXX系统"

代码如下:
总结:水晶报表具有非常强大的功能,还可进行导出WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的利器。
...全文
11928 78 打赏 收藏 转发到动态 举报
写回复
用AI写文章
78 条回复
切换为时间正序
请发表友善的回复…
发表回复
phprun 2014-06-14
  • 打赏
  • 举报
回复
Good啊,顶起
世纪殇 2014-06-11
  • 打赏
  • 举报
回复
在看,谢谢楼主了
yangguosheng 2014-01-03
  • 打赏
  • 举报
回复
谢谢分享,用用。
Davie1010 2014-01-02
  • 打赏
  • 举报
回复
楼主这真是个好东西呀
正义飞 2014-01-01
  • 打赏
  • 举报
回复
支持分享应用经验。
Delta 2013-12-31
  • 打赏
  • 举报
回复
不错,MARK一下。。。。。。。。。。
rickyandy 2013-12-30
  • 打赏
  • 举报
回复
好文章好文章好文章
孟幻星空 2013-12-30
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分
LPGG 2013-12-30
  • 打赏
  • 举报
回复
Delphi时代用过几天CrystalReport,哈哈—— 感谢LZ分享,我重温一下,顺便学习—— 感觉CrystalReport主要的问题不是好用不好用的问题,而是和我们的思路接轨的问题,它总有些......其实不就是个工具嘛,用上以后很快也就顺当了——
ungiveup 2013-12-27
  • 打赏
  • 举报
回复
advanced_Z 2013-12-27
  • 打赏
  • 举报
回复
水晶报表,不懂
CAINIAO123 2013-12-26
  • 打赏
  • 举报
回复
很不错。。。。。。。
叫我猫爷_ 2013-12-24
  • 打赏
  • 举报
回复
有些用VB写的看不懂..
suling1084 2013-12-23
  • 打赏
  • 举报
回复
收藏,虽然不搞.net 网站了
jayfhfcl 2013-12-23
  • 打赏
  • 举报
回复
小白学习了了
想去云南 2013-12-23
  • 打赏
  • 举报
回复
引用 57 楼 zzx112358 的回复:
[quote=引用 42 楼 Zenos 的回复:] [quote=引用 39 楼 zzx112358 的回复:] 刚刚在学chart。chart和水晶报表哪里不一样,谁好用。 毕竟我太菜了
Chart 以实现数据的图表显示,水晶报表是显示报表数据,数据可以通过Table、Chart或者任意的布局进行显示。也就是说水晶报表里面包含了Chart功能,但是在报表里面的Chart控件其暴露的事件和属性往往比单独的Chart控件少,通过更多的属性和事件可以进行更高级别的自定义操作。[/quote] 也就是说水晶报表更好? [/quote] 这是我对报表和图表的一点个人看法,主要是看你想做报表还是只显示图表。 不过就算做报表,我也不推荐你使用水晶报表。
祥子爱游戏 2013-12-23
  • 打赏
  • 举报
回复
引用 42 楼 Zenos 的回复:
[quote=引用 39 楼 zzx112358 的回复:] 刚刚在学chart。chart和水晶报表哪里不一样,谁好用。 毕竟我太菜了
Chart 以实现数据的图表显示,水晶报表是显示报表数据,数据可以通过Table、Chart或者任意的布局进行显示。也就是说水晶报表里面包含了Chart功能,但是在报表里面的Chart控件其暴露的事件和属性往往比单独的Chart控件少,通过更多的属性和事件可以进行更高级别的自定义操作。[/quote] 也就是说水晶报表更好?
liujiang917 2013-12-23
  • 打赏
  • 举报
回复
水晶报表难用的很
信仰诠释过往 2013-12-23
  • 打赏
  • 举报
回复
收藏了。。。。
sdsdfsafa 2013-12-23
  • 打赏
  • 举报
回复
赞。。。。。。。。。。。
加载更多回复(40)
水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文以VS2005简称)集成在一起。喜欢水晶报表的朋友可以方便使用了。我把水晶报表在vs2005的使用方法总结一下,供大家参考。 首先介绍一下我用的软件环境:Microsoft Visual Studio 2005;Microsoft SQL Server 2005 【数据用例】 服务器:SQLEXPRESS 数据库名:Test 数据库表:T 数据: 图1 【说明】 水晶报表在应用时分两种方法,分别是拉模式(PULL)、推模式(PUSH)。拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息(具体方法,后面介绍)。推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中SQL语句而生成的dataset对像。也就是说,推模式是用dataset组装水晶报表水晶报表组件介绍。水晶报表在VS2005中有两种组件,在WEB项目是分别是CrystalReportSource,CrystalReportViewer。在FORM项目里是分别是crystalReport,CrystalReportViewer。 CrystalReportSource,crystalReport是水晶报表的数据提供者;CrystalReportViewer是水晶报表的浏览器。另外还要介绍一下水的报表的文件是以rpt为扩展名的文件,该文件可以用VS2005生成。 下面分别介绍具体操作方法: 拉模式(PULL): 在拉模式中如要在水晶报表中的SQL语句加上条件参数时要用{?参数名}方式给出。例:“Select T1, T2, T3 FROM T Where T1='{?parm}'” parm就是参数名 以下例子中所用到的水晶报表文件中使用的SQL语句是“Select T1, T2, T3 FROM T Where T1='{?parm}'” parm就是参数名。 【WEB方式下】 using CrystalDecisions.Shared; using CrystalDecisions.CrystalReports.Engine; /// ///功能:拉模式提取水晶报表 ///个人主页:http://www.dzend.com/ /// /// /// protected void Button_pull_Click(object sender, EventArgs e) { // CrystalReport.rpt是水晶报表文件的名称;CrystalReportSource1是从工具箱加到页面上的水晶报表数据源对像。 CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt")); // SetDatabaseLogon 拉模式中必须用这个方法来设置登录信息,参数一:用户名;参数二:密码;参数三:服务器;参数四:数据库名 CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa", "123456", @"SYWZSWL\SQLEXPRESS", "Test"); //给水晶报表传参数,参数一:是参数名,参数二:参数值; CrystalReportSource1.ReportDocument.SetParameterValue("Title", "这是一个测试报表"); CrystalReportSource1.ReportDocument.SetParameterValue("Parm", "1"); //绑定水晶报表数据源。 CrystalReportSource1.DataBind(); // CrystalReportViewer1是水晶报表浏览器,下面是给该浏览器赋上对像 CrystalReportViewer1.ReportSource = CrystalReportSource1; CrystalReportViewer1.DataBind(); }

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧