水晶报表知识汇总
- 格式:docx
- 大小:16.98 KB
- 文档页数:7
水晶报表使用总结手头上的一个项目,终显雏形,其中遇到一些问题,经过多番努力,终于得以解决,主要是水晶报表方面的。
因为是第一次用,总结的同时,也给后来可能用到水晶报表的人一些微弱的指引,所以如果总结的不好的话,请大家指正。
关于水晶报表的一些基本概念,如push和pull模式等如果想了解的话,自己百度搜索下,或是找本书看就可以了。
这里我主要是根据实际应用到的要求,来进行带图的详细介绍,希望对新手有所帮助。
使用的是VS2008,在页面中添加命名空间的引用,主要有以下几个:using CrystalDecisions.CrystalReports.Engine;using CrystalDecisions.ReportSource;using CrystalDecisions.Shared;下面先来看下,利用水晶报表做出来的效果图,只是实现功能,界面未经过美工处理,有点难看,多多包涵.图一图二由于是统计报表,所以在应用中需要传递参数值,在实际应用中,我是利用了存储过程来实现的。
Create proc PrintCJ@cjbh varchar(50)AsSELECT Cjdy_zb.DWMC, Cjdy_zb.ND,Cjdy_zb.JD, Cjdy_zb.QSDD,Cjdy_zb.JFJZRQ, Cjdy_zb.YJQJS, Cjdy_zb.YJQJZ, Cjdy_zb.SKDW,Cjdy_fb.QSSY, Cjdy_fb.YT, Cjdy_fb.DYGY,Cjdy_fb.DEGY, Cjdy_fb.DSGY, Cjdy_fb.BCHJ FROM Cjdy_fb INNER JOIN Cjdy_zb ON Cjdy_fb.CJBH = Cjdy_zb.CJBH and Cjdy_zb.CJBH= @cjbh;GO下面截图截图一步一步来操作实现:(1)、在项目中添加一个新文件夹,如Report文件夹,然后在该目录下右键添加Crystal报表。
水晶报表(Crystal Reports)常用字段
1、数据库字段:
数据源已有字段,无论是表还是TTX文件,在报表中已有的字段,可以直接拉取数据;
2、公式字段:
公式字段主要是要用来数据类型间的计算与换算,算数运算(+、-、*、/、%百分比运算),条件运算(if then else),比较运算(=、<>、<、>、>=、<=),转换运算,或且非运算(And、Not和Or)等;
3、参数字段:
参数字段主要是作为报表筛选条件,如:楼区,时间,帐户类型,交易代码,班次等;
4、组名字段:
组字段其实是多个字段值的集合,是按照相同条件筛选的结果集;如:某天在店的宾客名单,挂入的每一笔消费或者付款列表,各种汇总统计报表等;
5、运行总和字段:
汇总一个字段的求和,最大,最小,平均,计数等等;
6、SQL表达式字段:
SQL表达式与公式类似,都写在查询语言,也可以用来查询数据库,为特定的数据集;
SQL表达式可以是一个组合的一个或多个值,运算符和SQL函数的值计算。
7、特殊字段:
特殊字段主要是水晶报表本身的一些字段属性,如:打印时间,打印日期,页数,页码,统计时间,修改时间,修改日期等等;
8、未绑定字段:。
2019-1-17⽔晶报表技巧总结【⼆】第⼀条:⽔晶报表分组分页且每页最多显⽰N条记录要求:1、详细节最多5条记录(不能超过5条);2、⽆论前⼀组是否满5条记录,每个新组都要另起⼀页3、可以显⽰组内分页的情况,即:显⽰⼀个组被分为⼏页并且当前是第⼏页我们知道每页最多显⽰N条的控制⽅法,打开节专家,在详细节后⾯新建页公式编辑:RecordNumber mod N = 0RecordNumber即记录数,⽆论分组与否,是⾃动随记录递增的,所以在这⾥,我们不能⽤RecordNumber,⽽应该是在每个新组前要重置这个RecordNumber,⽤这个重置的RecordNumber来取模控制每页最多显⽰5条记录,于是我们很⾃然就想到了运⾏总计字段,由它来帮我们重置RecordNumber,这样我们应该就很明朗了,接下来让我们⼀起去设计模板:报表按ID分组就不⽤再提及了吧?(右击报表空⽩处->插⼊->组)⾸先新建⼀>运⾏总计字段汇总字段:XXX(最好选择的字段和分组字段不同)汇总类型:计数求值:对于每个记录重置:组更改时设计好后把,字段放到【详细资料】中,根据需要可以抑制显⽰。
点击节专家,【详细资料】-->【在后⾯也新建页】勾上-->设置公式:字段是刚刚建⽴的【运⾏总计字段】{#RTotal0} mod 10=0针对需求2,与需求1同理,只不过此时我们是在#组尾(组页脚)节在后⾯页新建页的公式编辑:Not OnLastRecordOnLastRecord意指最后⼀条记录,Not OnLastRecord⾃然是⾮最后⼀条记录,在这⾥就是指⾮最后⼀条记录时就在后⾯页新建页,最后⼀条记录时就不⽤再新建页了。
若不⽤该公式控制的话,报表的最后⼀页总是空⽩页(没有详细节数据)需求3:组内分页及显⽰页码新建⼀个【公式字段】公式设置如下:记录的组记录总数:count(⼀个报表参数,分组参数);前者最好是运⾏总计的字段。
水晶报表的使用经验和资料总结资料:中使用水晶报表(上) 2002-9-6 DotNet吧[HTML]在我们对中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心。
一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的程序中,并得到了一些小决窍。
这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。
为了得到最好的效果,读者最好需要有一些基础的访问数据库的知识以及使用的开发经验。
简介水晶报表可以由很多的方法得到,其中一个就是使用来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。
如果你正在使用开发.Net程序,那么你就不需要再安装其它软件了,因为他已经内嵌在中了。
优点:水晶报表有下面一些主要的优点:快速的报表开发能够导出成为复杂的交互性图表可以与其它控件一起在WebForm中使用能够动态地将报表导出成为.pdf,.doc,xls,html,rtf等多种格式结构:一些组件组成了水晶报表的二层结构,需要的Web应用有:客户端 :客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了服务器 :- 水晶报表引擎(Crystal Report Engine (CREngine.dll))通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。
也正是因为报告引擎的作用,才可以将中的水晶报表转换成为普通HTML格式- 水晶报表设计器(Crystal Report Designer (CRDesigner.dll))水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。
- .rpt报表文件执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了一些现成的.rpt例子。
- Data Source.rpt文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet,然后再将其传送到报表文件。
水晶报表分页汇总收藏水晶报表分页汇总建三个公式字段,第一个(公式1)输入下面的公式:whileprintingrecords;global numbervar ptotal;ptotal:=0;第二个(公式2)输入下面的公式:whileprintingrecords;global numbervar ptotal;ptotal := ptotal + [要汇总的字段];如果要汇总的字段不是数字,就用tonumber()函数转换;第三个(公式3)输入下面的公式:whileprintingrecords;global numbervar ptotal;把公式1放在页眉,公式2放在详细资料,并隐藏公式1和公式2;把公式3放在页脚,格式公式3,设置为你要显示的格式。
这样就行了。
水晶报表分页并自动插入空白行在论坛上经常会看到水晶报表分页的问题,这个很好解决。
但是自动插入空白行的问题却一直没有很好的答案,经过研究找到一个变通的办法来实现了。
'分页在详细资料上点格式化节,在后面页新建页打勾公式中输入:if _disibledevent= FALSEelseif RecordNumber mod 5 =0 thenFORMULA = TRUEelseFORMULA = FALSEend ifend if'(BASIC 语法)---------------------------------------------------------------------最后页不足,用空行填充:新增一个空白详细资料行,格式化此节,在抑制显示(无深化)打勾公式中输入:if not _disibledevent= TRUEelseif (RecordNumber mod 5 <= 1) then '第一个,1FORMULA = TRUEelseFORMULA = FALSEend ifend if'(BASIC 语法)...接着第二个[ 新增一个空白详细资料行,格式化此节,在抑制显示(无深化)打勾]:公式中输入:if not _disibledevent= TRUEelseif (RecordNumber mod 5 <= 2) then '第二个,2FORMULA = TRUEelseFORMULA = FALSEend ifend if...接着第三个[ 新增一个空白详细资料行,格式化此节,在抑制显示(无深化)打勾]:公式中输入:if not _disibledevent= TRUEelseif (RecordNumber mod 5 <= 3) then '第三个,3FORMULA = TRUEelseFORMULA = FALSEend ifend if在论坛上经常会看到水晶报表分页的问题,这个很好解决。
Crystal水晶报表基础知识汇总(一)制作B/S的朋友肯定对Crystal Report绝不陌生功能强大,方便我在网上查找了许多关于Crystal Report的资料对其做了整理、调试在自己学习的同时,也希望拿出来与大家分享不足之处请多指教一、Crystal报表的建立水晶报表在应用时分两种方法,分别是拉模式(PULL)、推模式(PU SH)拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中SQL语句而生成的dataset对像也就是说,推模式是用dataset组装水晶报表水晶报表组件介绍:水晶报表在VS2005中有两种组件:WEB项目中分别是CrystalReportSource,CrystalReportViewerFORM项目里是分别是CrystalReport,CrystalReportViewerCrystalReportSource,crystalReport是水晶报表的数据提供者;CrystalReportViewer是水晶报表的浏览器另外还要介绍一下水的报表的文件是以rpt为扩展名的文件,该文件可以用VS2005生成WINFORM中的建立:1.首先建立一个新的项目工程,在项目中添加一个Crystal报表在报表的创建向导中我们创建一个新的OLE DB (ADO)连接,以便于我们对SQL数据库中表的连接2.在弹出的连接类型窗口内,选择Microsoft OLE DB Provider for SQL Server一项,以确立报表的数据连接为SQL服务类3.在连接信息当中选择所需使用的服务器名,并输入相应用户ID和密码,选择好报表所要连接的数据库后,新的数据库连接便建立完成此时,我们可以从报表数据连接窗口中看到我们所创建的报表,并选择需要的表,进行数据连接4.此后,我们可以根据报表向导进行表间关联、排序索引设置、;样式选择等表的初始化设置完成Crystal 报表与SQL服务器内数据连接以后,我们可以在报表中预览所创建的报表样5.对Crystal报表进行保存后,在WINFORM的窗口中建立CrystalReportViewer控件,生成水晶报表的预览窗口在建立中,我们可以根据需要对该控件的添加项进行筛选,包括显示工具栏、显示组树、显示状态栏三项6.在WINFORM窗口中添加ReportDocument控件,并为该控件选择一个需要进行类型化的Report表单WEBFORM中的建立:建立方法与WINFORM方式基本相同,但不需要建立ReportDocument 在建立过程中一定注意,在.aspx 设计器中建立CrystalReportViewer与CrystalReportsource两个控件,前者用作水晶报表的预览,后者起到报表与预览连接的作用,负责建立CrystalReportViewer与Crystal报表间的连接二、报表数据的连接拉模式(PULL):WINFORM中建立连接:方式一:如果该页面只调用固定的一个Crystal报表,可以直接在CrystalReportViewer中进行选择报表,将Crystal 报表与其进行绑定方式二:如果页面需根据具体要求,调用不同的报表进行显示,那么我们就需要通过对报表的连接的设置来完成这一功能程序如下://CrystalReport1.rpt是水晶报表文件的名称;CrystalReport11是从工具箱加到页面上的CrystalDocument crystalReport11.Load(Application.StartupPath + "CrystalReport1.rpt");//运用CrystalDocument读取所需Crystal表单路径;crystalReport11.SetDatabaseLogon("sa", "", @"BENQ-JA Y", "Userdatabase");//进行CrystalDocument连接服务器的设置,其中第一参数:用户名;第二参数:密码;第三参数:服务器名;第四参数:数据库名crystalReportViewer1.ReportSource = crystalReport11;//将CrystalReportViewer的报表源指向CrystalDocumentWEBFORM中建立连接:方式一:在CrystalReportSource中直接对表单源进行配置,选择需要宣示的表单在CrystalReportViewer中将报表源指定为CrystalReportSource,即可在该网页中生成指定报表的水晶报表方式二:通过程序进行具体配置,将所需Crystal报表与预览页面进行连接实现报表的灵活性选择程序如下:// CrystalReport.rpt是水晶报表文件的名称;CrystalReportSource1是从工具箱加到页面上的水晶报表数据源对像CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));//读取Crystal表单所在路径,将其与CrystalReportSource进行绑定CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa", "", @"BENQ-JA Y", "UserDatabase");//进行数据库连接,参数一:用户名;参数二:密码;参数三:服务器名;参数四:数据库名CrystalReportSource1.DataBind();//对CrystalReportSource进行数据绑定CrystalReportViewer1.ReportSource = CrystalReportSource1;//将预览源指定为CrystalReportSourceCrystalReportViewer1.DataBind();//对CrystalReportViewer进行数据绑定推模式(PUSH):在推模式下,必须建立DataSet数据集,用来进行数据源填充在推模式中编程组装的DataSet里的SQL 语句中的字段要与水晶报表里的SQL语句字段一致WINFORM中建立连接:程序如下:string sql = "select * from UserInfor";string conn = "server=BENQ-JA Y;Database=UserDatabase;uid=Sa;Pwd=;";DataSet ds = new DataSet();SqlConnection con1 = new SqlConnection(conn);SqlCommand cmd1 = new SqlCommand(sql, con1);SqlDataAdapter sqlad = new SqlDataAdapter();sqlad.SelectCommand = cmd1;//获得一个TRANSACT-SQL存储过程,用于在数据源中选择记录sqlad.Fill(ds, "sql");//填充SQL命令所指定的行crystalReport11.Load(Application.StartupPath + "CrystalReport1.rpt");crystalReport11.SetDataSource(ds.Tables["sql"]);crystalReportViewer1.ReportSource = crystalReport11;WEBFORM中建立连接:程序如下:string sql = "select * from UserInfor";string con1 = "server=BENQ-JA Y;Database=UserDatabase;uid=sa;pwd=;";DataSet ds = new DataSet();SqlConnection con = new SqlConnection(con1);SqlCommand com = new SqlCommand(sql, con);SqlDataAdapter sqlad = new SqlDataAdapter();sqlad.SelectCommand = com;sqlad.Fill(ds, "sql");CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt")); CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);CrystalReportSource1.DataBind();CrystalReportViewer1.ReportSource = CrystalReportSource1;CrystalReportViewer1.DataBind();三、报表打印水晶报表的CrystalReportViewer中默认配备的工具栏可实现打印功能,但其功能比较单一,无法进行打印机选择。
汇总函数的条件以下是每个汇总函数的条件列表:布尔型条件∙任何更改∙更改为“是”∙更改为“否”∙对每个“是”∙对每个“否”∙对下一个“是”∙对下一个“否”日期条件∙每天∙每周∙每两周∙每半月∙每月∙每季∙每半年∙每年时间条件∙每秒∙每分钟∙每小时∙上午/下午SumBasic 语法和 Crystal 语法。
重载∙Sum (fld)∙Sum (fld, condFld)∙Sum (fld, condFld, cond)∙Sum (x)参数∙fld 是可由函数求值的任何有效的数据库字段或公式字段。
∙condFld 是用于对fld 中的值进行分组时所依据的字段。
∙cond 是表明condFld 分组类型的字符串。
只能在condFld 是一个日期、时间、日期时间或布尔字段时才指定此参数。
有关此参数有效字符串的详细信息,参见汇总函数的条件。
∙x 是可由正在使用的函数求值的数字或货币值的数组。
返回数字操作使您能够添加报表中出现的值。
例如:∙如果销售报表包含一个显示每张订单金额的字段,则可以计算报表上出现的所有订单的总和(总计和)。
∙如果对订单进行分组(例如,按订单所来自的省份对其分组),则可以计算每组订单金额的总和(在本例中,为每个省)。
∙如果将订单按日期或布尔值分组(例如,对订单按其发出的月份进行分组),则可以根据日期字段或布尔字段中的特定变化来计算每组订单金额的总和(在本例中,为每月)。
∙如果指定单个值的集合,则也可以计算该集合中值的总和。
有关这种汇总的详细信息,参见数组汇总函数。
示例下列示例适用于 Basic 语法和 Crystal 语法:Sum({file.QTY})计算 QTY 字段中所有值的总和。
Sum({订单.金额}, {订单.客户 ID})对“金额”字段中每个订单组的订单求和(总计)。
每当“客户ID”字段中的值变化时,订单都将进行分组。
Sum({订单.金额}, {订单.日期}, "monthly") % Sum({订单.金额 })对“金额”字段中的值按月分组,并计算每个月组中值的总和相对于整个报表值的总和的百分比。