【水晶报表内功心法】--第一阶段小结

阿泰 2009-07-13 06:44:03
加精
索引

.【水晶报表内功心法】--序言
.【水晶报表内功心法】--推拉之间
.【水晶报表内功心法】--PULL模式样板招式
.【水晶报表内功心法】--PUSH模式样板招式
.【水晶报表内功心法】--信手拈来,掌控对象
.【水晶报表内功心法】--数据过滤

...
...
.【水晶报表内功心法】--完美Excel(上)
.【水晶报表内功心法】--完美Excel(下)
============================================================
今天数据库狂慢,数据库服务器是百万大元的超强机器,还是被折腾得半死不活的。刚好有点时间,写一下这篇。

本文是第一阶段的小结,第一阶段主要讲解了推拉模式,以及基本操作,和数据的过滤。它的主要目的就是解决怎么把数据与报表的交互问题。
前后历时近一月,反响一如我当初所料,不会很强烈。而且很多人,也是因为推荐到首页后,习惯性的顶一下。并没有认真的去看内容。
毕竟水晶报表的应用范围比较小。不过我也很高兴能看到几位朋友,能真正的去看了,还参与了讨论。
我本来的目的,就是为了系统地介绍水晶报表的应用,一来是方便大家在用到的时候查阅和学习,二来也能减少自己的重复回复。

下一阶段,则主要讲解报表在拿到数据后的进一步处理。

大致会分为以下几个章节:
参数、函数与公式、运行时总计
分组
子报表
交叉表
图表


仍然是讲解基本概念和应用技巧以及应用场景,这些讲完,也基本完成了整个报表功能的基本介绍了。这些预计在7月份完成。
有时间的话,我会零散讲一下水晶易表(水晶报表的兄弟产品)的应用,看一下这个工具的酷炫效果。

1:PULL模式和PUSH模式的选择

PULL执行效率高,开发简单,适用于WinForm程序,用户不是很多的系统。
但是多了一个数据库连接,而且这个链接的占用时间还比较长,所以不适合用户多的系统。
有一种特例,就是数据量特别大的情况,我推荐用PULL。

PUSH则很灵活,可以承接任何数据源。比如不是从数据库里直接出来的数据,或者是来自于WebService等其他应用的数据接口。


2:WebForm开发的一个重要技巧:小代码,大作用

在前面的文章中,我一直是用WebForm演示的,主要是因为 HTTP是无状态的,在此链接的操作,不会带到下一连接中。
所以我们经常会遇到这样的情况,当前显示好的,在翻页、导出、打印等动作的时候,出出现无数据,或者需要重新登陆数据库的提示。
这是因为这些动作都重新触发了页面,导致我们前一次的操作丢失了。
所以之前的代码,我一直是写在Page_load里的,但是这样一是不能解决所有的问题,特别是涉及到有参数传递等情况。
二是可能会多次请求数据库,导致资源的消耗。

前面说到既然是状态丢失,那么我们可以用.Net里的session,cache或viewstate来进行保持状态

这里我用session做一个范例,场景是这样的:
一个PUSH模式的报表,带一个参数p1.
界面上有一个Button,点击后展现报表。然后报表可以进行翻页、打印和导出(这些是工具条实现的,不进行编码实现)而不会出现错误提示。

其实只要改造两处地方即可,注意红色的部分

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//使用Session保持ReportDocument对像
//每次页面更新时,不再需要重新走数据库
//注意:如果是VS2008,这段代码要放到Page_Init事件中

If (Session["myRpt"]!=null) then
{
CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"];
}


}

//点击按钮后,报表进行第一次呈现
protected void Button1_Click(object sender, EventArgs e)
{
//连接字串
String connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\CrZen\testall.mdb;";
OleDbDataAdapter da = new OleDbDataAdapter();
OleDbConnection cn = new OleDbConnection(connstr);

da = new OleDbDataAdapter("SELECT * From RPT_CR_TEST1", cn);
DataSet2 dt1 = new DataSet2();
da.Fill(dt1, "RPT_CR_TEST1");
ReportDocument myReport = new ReportDocument();
string reportPath = Server.MapPath("crystalreport1.rpt");
myReport.Load(reportPath);

//绑定数据集,注意,一个报表用一个数据集。
myReport.SetDataSource(dt1.Tables[0]);
myReport.SetParameterValue("p1","参数测试");
CrystalReportViewer1.ReportSource = myReport;

//保存到Session

Session["myRpt"]=myReport;

}

}


本文将持续更新一段时间。
...全文
25384 105 打赏 收藏 转发到动态 举报
写回复
用AI写文章
105 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigheadsheep 2012-05-10
  • 打赏
  • 举报
回复
楼主讲的太细了,正好适合我们这样的初学者,谢谢
bigheadsheep 2012-05-07
  • 打赏
  • 举报
回复
正在学习水晶报表,多谢楼主的教诲,又不懂的地方还要多多讨扰
chenwei151 2012-03-12
  • 打赏
  • 举报
回复
顶,正好是我需要的资料!
再见寒冰玉 2011-12-13
  • 打赏
  • 举报
回复
楼主,帮你顶一下,虽然以前我从来不回帖的,但是看到你这样的为大家贡献资源,破例为你顶下,虚心学习
longzhongyuan 2011-11-21
  • 打赏
  • 举报
回复
顶起!!!虽然我是用vb.net 也照样学习了,楼主真是个好淫啊,辛苦辛苦!
zhongjh_ORZ 2011-11-13
  • 打赏
  • 举报
回复
好贴啊!解决了我一直以来的困惑,谢谢高人!力顶!!
cdz1022 2011-10-21
  • 打赏
  • 举报
回复
学习。
mainer007 2011-10-19
  • 打赏
  • 举报
回复
阿泰,
救命啊!
我这里是个winform的app,调用水晶报表打印方法,在开发机器上测试都可以的,可是在部署到客户机上时,有一个单打印150张的,结果打印到125张的时候报错了,提示加载报表失败,请问是什么问题?
麻烦给点指点或者思路。

谢谢了!
a474841314 2011-09-29
  • 打赏
  • 举报
回复
mark
山东蓝鸟贵薪 2011-09-19
  • 打赏
  • 举报
回复
谢谢分享,有没有完整点的下载包呀???????
dapengytt163 2011-08-31
  • 打赏
  • 举报
回复
关注中,学习学习
meilingaiyiff 2011-05-17
  • 打赏
  • 举报
回复
阿泰的东西对我太有用了,万分感谢阿泰
daodao0704 2011-05-04
  • 打赏
  • 举报
回复
阿泰,我想问下,水晶报表做报表容易,还是active reports做报表容易?我学了两个礼拜的水晶报表,结果上司说,水晶报表不好控制,效率低。。。他是因为报表的显示对于内容多少的不同不够智能,做出来的报表,会造成纸质的浪费。。。
Zhen (Evan) Wang 2011-04-20
  • 打赏
  • 举报
回复
很强大
lianshuaike 2010-12-31
  • 打赏
  • 举报
回复
服了!1294792470编程爱好者,有兴趣的可以加我QQ
yangzn76 2010-11-18
  • 打赏
  • 举报
回复
收藏了,很有参考价值。
风情飘逸 2010-10-28
  • 打赏
  • 举报
回复
protected void Page_Unload(object sender, EventArgs e)
{
//doc.Close();
// doc.Dispose();//取消注释后有空指针异常
}


我在代码中加了这个方法后,

CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"];
这句会报空指针异常,怎么解决,我想用到doc.dispose();

其中doc是类成员:ReportDocument doc = new ReportDocument();
猎人日记 2010-09-17
  • 打赏
  • 举报
回复
学习中
reason159 2010-08-26
  • 打赏
  • 举报
回复
膜拜~~~~~~~~~~~~~
yangfanai1010 2010-08-23
  • 打赏
  • 举报
回复
不錯,頂一下!!!!收藏。。。
加载更多回复(83)
Crystal Reports 9.2 中文版(水晶报表) 下载,,软件版本:9.2.0.448不过现已出了Crystal Reports Professional v9.2.2.634 (c) Crystal Decisions,有足够的空间就提供.这是一个很不错的报表控件,我相信很多朋友都听说过吧!Crystal Reports 用于处理数据库,帮助用户分析和解释重要信息。使用 Crystal Reports 可以方便地创建简单报表,同时它也提供了创建复杂或专用的报表所需的整套工具。 创建所能想象的任何报表 Crystal Reports几乎可以从任何数据源生成您需要的报表。内置报表专家在您生成报表和完成一般的报表任务过程中,会一步一步地指导您进行操作。报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息交流。 将报表扩展到 Web Crystal Reports 的灵活性并未停留在创建报表这一功能上 ?您可以用各种各样的格式发布报表,包括用 Microsoft 的 Word 和 Excel 发布、通过电子邮件甚至 Web 发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。 将报表并入应用程序通过将 Crystal Reports 的报表处理功能整合到自己的数据库应用程序中,应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。Crystal Reports 支持大多数流行的开发语言,可以方便地在任何应用程序中添加报表。 不论您是 IT 行业的站点管理员,还是营销推广经理,也无论您是金融业的数据库管理员还是 CEO,Crystal Reports 都堪称是一个功能强大的工具,它可以帮助每一个人分析、解释重要信息。感谢 revenant 上传!

4,820

社区成员

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

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