水晶报表 水晶报表开发工具
【水晶报表内功心法】--推拉之间
【水晶报表内功心法】--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:CrZentestall.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;
}
}
给水晶报表添加数据源VS2005和VS2008给出了很多形式,但是使用报表直接连接到数据库(也就是Pull方式)的方式,使得修改数据源非常不方便.所以我们可以使用dataset(数据集)的形式来为报表添加数据源.
首先我们要添加一个数据集(扩展名称为.xsd),将要使用的表托进文件中.根据它的建设向导就可以很顺利的完成这一步.完成之后建立一个水晶报表文件(扩展名称为.rpt).同样根据向导选择数据源,这时的数据源我们要选择ADO.NET方式,然后选择我们新建的数据集文件,完成就可以了.
但是完成这一步并没有使水晶报表和数据库分离开.在水晶报表之间只是隔了一个数据集,但是数据集与数据库之间的关系依然是紧耦合的.当数据库改变的时候水晶报表依然不能得到数据.所以我们要使用C#代码对数据集进行控制.我们新建立一个类对数据集进行控制.在类里面我们新建一个数据库连接,取代数据集与数据库的连接.然后通过SQL语句进行查询,然后将数据添加到数据集的实例中.再将数据集赋值给水晶报表.这样水晶报表和数据库就分开了.
首先描述一下问题:因为客户的需要,把所有对于数据库的操作做成了存储过程,同时也存在带有输入参数的存储过程.客户要求将所有的信息都可以用水晶报表显示.我们都知道,要使用水晶报表我们就要使用数据源的.在这里,我们使用的数据源自然而然也就是存储过程了.当然,我们也是知道的,在ADO.NET的连接模式下,要给水晶报表设置数据源我们需要用到数据集文件,同时,也免去了我们设计水晶报表的时间.在使用数据集文件作为水晶报表的数据源时存在了这样一种情况,我们使用没有带输入参数的存储过程是很简单的,可是一旦我们要往存储过程里面传入参数,就出现了问题,我们不能像在winform当中那样给水晶报表实例化,原因是在ASP.NET 2005中水晶报表是一个文件,它没有附带的.cs文件.那么,我们如何解决这个问题呢?
解析:参照以前在winform里面设计的模式,我们可以想到,在winform中水晶报表可以实例化,数据集文件也是可以实例化的,可是在上述问题中是不能实现的,也就不能按照winform中的写法去写这些代码了.我们可以回想一下在ASP.NET下所用到的东西:aspx文件,aspx.cs文件,水晶报表,报表阅读器,报表源,数据集文件,存储过程.可见,报表源这个控件是在winform写法中没有的东西,所以我们可以利用它来实现我们的功能.
解决问题:首先,我们创建数据集文件,在创建时会出现创建向导,我们要选择"已存在的存储过程",然后选择我们要使用到的存储过程,完成数据集文件的创建.第二,创建水晶报表,按照向导指示,选择新建ADO.NET连接,浏览到我们刚刚创建好的数据集文件,根据需要文成水晶报表的设计.第三,创建页面文件,添加报表阅览器控件,这时软件会给出提示,没有设置报表源,我们不用管它,而是自己添加一个报表源控件.接下来的操作就是在页面文件中通过报表源控件给存储过程传入数值了.见代码:
string strsql1 = "exec USP_REP_Customer_Normal_By_Organization '" + Session["msg"].ToString() + "'";
DataSet dt=DBHelper.getDataSet(strsql1,"4sShopRegisterList");
//添加报表
CrystalReportSource1.ReportDocument.Load(Server.MapPath("../rtp/4SShopRegisterList.rpt"));
//设置数据源
CrystalReportSource1.ReportDocument.SetDataSource(dt.Tables["4sShopRegisterList"]);
//绑定数据源
CrystalReportSource1.DataBind();
//给浏览控件设置报表源
CrystalReportViewer.ReportSource=CrystalReportSource1;
//绑定
CrystalReportViewer.DataBind();
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xm18love/archive/2009/12/25/5075949.aspx
更多阅读
天然粉水晶的功效与鉴别 粉水晶功效
天然粉水晶主开发心轮,加强心脏和肺功能健康,可以松弛紧张情绪,舒缓烦躁心情。协助深入内心提高自我悟性,粉水晶散发着温和而吸引人飞粉色光芒,可以改善人际关系,促进人缘生意缘等功效,但是我们要怎么去识别这种附有神奇魔力的水晶饰品呢?今
报表怎么做? 财务报表怎么做
报表怎么做?——简介介绍报表的制作方法,使用工具为比Excel更专业、简洁的报表工具制作。这年头能灵活熟练的使用报表软件已经成为一项基本本领,加油!报表怎么做?——工具/原料报表制作工具:FineReport报表软件免费下载点:h
开发工具之Eclipse快捷键 eclipse前端开发工具
Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。开发工具之Eclipse快捷键——步骤/方法开发工具之Eclipse快捷键 1、【ALT+/】此快捷键为用户编辑的好帮手,能为用
粉水晶的功效 黄水晶的功效与作用
粉水晶的功效——简介粉水晶学名芙蓉石,有普通粉水晶、芙蓉粉水晶、冰种粉水晶、星光粉水晶四种类。粉水晶主开发心轮,加强心肺功能的健康。可松弛紧张情绪,舒缓烦躁心情,协助深入内心,发现自我提高悟性。粉水晶散发着温和而吸引人的粉红
口袋妖怪-水晶攻略 口袋妖怪液态水晶攻略
口袋妖怪-水晶攻略——简介帮大家找的口袋妖怪-水晶攻略——工具/原料口袋怪兽水晶游戏口袋妖怪-水晶攻略——方法/步骤口袋妖怪-水晶攻略 1、