专注于技术经验交流

水至清则无鱼、宁静而致远!

技术、经验、学习共同打造网络新生活!
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

水晶报表使用经验谈(1-5)

Posted on 2006-12-11 13:06  小鱼儿  阅读(604)  评论(0编辑  收藏  举报
初用水晶报表(vs .net2003集成,版本Version=9.1.5000.0) 
装好后要注册 注册号:6707437608 密码:AAP5GKS0000GDE100DS  


想要在.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();? 
  
以上完全是个人使用总结 如有不对或可以改进的地方 请大家指正
 使用sql语句直接生成dataset做为报表的数据源!(2)

上一次自己做了直接在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参数

10)运行试试看!应该没问题哦
在报表中显示多个表的字段(通过表关联)(3)

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

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

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

基本上就是这样 大家可以试着做一下 有什么问题可以一起讨论一下
水晶报表使用经验谈4--使用视图解决在报表中的多表关联问题

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

        其实在我以前的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文件

基本上就是这样,还有问题的话大家请留言吧:)
水晶报表使用经验谈5--使用格式化编辑器

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

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

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

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


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

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

贴所要讲述的重点;

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

(点击图片可看原图)

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


New Document