Crystal报表设计以及公式详细
- 格式:ppt
- 大小:1.36 MB
- 文档页数:53
可编辑修改精选全文完整版水晶报表CryStalReport使用教程(动态数据绑定)
第一步:添加水晶报表报表
1、右击鼠标,选择水晶报表
2、选择作为空白报表
第二步:添加数据集DataSet 1、右击鼠标,选择数据集
2、单击工具箱,拖拽一个DataTable到右边
3、根据数据表设计好DataTable
第三步:设计报表
1、从工具箱拖拽一个文本对象到页眉,并输入文字
2、选择字段资源管理器,右击数据库字段,选择数据库专家
3、从我的连接中选择MYDataSet到右边的选定的表
4、从左边的数据库字段中拖拽一些需要的字段到右边详细资料
5、展开特殊字段,拖拽一个第N页共M页,到页脚
第四步:添加页面
在页面中添加一个CryStalReportViewer控件
第五步、双击页面,编写数据绑定代码
protected void Page_Load(object sender, EventArgs e)
{
BLL.QueryAllStuService Qas = new BLL.QueryAllStuService();
MyCrystalReport Mcr = new MyCrystalReport();
Mcr.SetDataSource(Qas.QueryAllStudents());
CrystalReportViewer1.ReportSource = Mcr;
}
单击F5,运行效果如下:。
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({订单.金额})对“金额”字段中的值按月分组,并计算每个月组中值的总和相对于整个报表值的总和的百分比。
⽔晶报表-控制结构-If表达式(Crystal语法)当对公式求值时,没有控制结构的公式只执⾏⼀次公式中的每个表达式。
表达式按顺序执⾏,从公式的第⼀个表达式到最后⼀个表达式。
控制结构能使这种死板的顺序有很多变化。
根据所选的控制结构不同,您可以跳过⼀些表达式或根据某些条件对⼀些表达式重复求值。
控制结构是表达商务逻辑的主要⽅法,典型的报表公式都⼴泛采⽤它。
If 表达式(Crystal 语法)If 表达式是最有⽤的控制结构之⼀。
它使您得以在条件为 true 时对⼀系列表达式求值,⽽在条件不为 true 时对其他⼀系列表达式求值。
注意⽤条件公式格式设置时,始终要包括 Else 关键字;否则,不符合 If 条件的值可能不会保留原来的格式。
为避免此类情况发⽣,可以使⽤DefaultAttribute 函数 (If...Else DefaultAttribute)。
某公司计划发给其员⼯ 4% 的奖⾦,⽽销售部门的员⼯将得到 6% 的奖⾦。
下⾯的公式使⽤ If 表达式实现这⼀⽬的:If {Employee.Dept} = "Sales" Then{Employee.Salary} * 0.06Else{Employee.Salary} * 0.04在本⽰例中,若条件 {雇员.部门} = "Sales" 求值为真,则处理{Employee.Salary} * 0.06表达式。
否则处理 Else 后⾯的表达式,也就是{Employee.Salary} * 0.04表达式。
假设另⼀公司想要发给其员⼯ 4% 的奖⾦,但奖⾦最低⾦额是 $1,000。
注意没有包含 Else ⼦句;该⼦句是可选的,在这种情况下并不需要。
Local CurrencyVar bonus := {Employee.Salary} * 0.04;If bonus < 1000 Thenbonus := 1000;//最后⼀个表达式正好是变量 'bonus'。
跟我⼀起学VisualStudio2005(18):CrystalReport篇之公式详解。
⼀,Basice 语法1,公式的结果--每个公式必须返回⼀个值--Basice语法通过设置特殊变量“formula”的值来实现,不能返回数组或范围类型。
2,注释-- REM, ' 注释3,furmula变量在设置为⼀种数据类型,则后⾯不能在同⼀个公式中设置为另⼀种类型值。
例如:Global a AS string ,b AS Number,z AS DateTimeif{Orders.Order Amount} >= 1000 thenformula = "Insured shipping";elseformula = "Regular shipping"end if4,字段-- 许多字段可以在公式中引⽤。
例如,数据库,参数,运⾏总计,SQL表达式,摘要,组名等。
也可以在公式中引⽤其他公式字段。
5,公式中表⽰字段-- 参数字段:{?我的参数字段}--公式字段: {@ another formula}--运⾏总计字段:{# my running total}--SQL表达式字段:{% my SQL expression}--摘要和组名看起来像函数,实际上是报表字段的速记写法-- 摘要: Sum({订单.订单⾦额},{订单.承运商})-- 组名: GroupName({订单.承运商})6,语句-- 每个语句占⼀⾏(新⾏或冒号分开) y = “” : x = 30 :formula = true-- 截断, x = 10 + _10 + 10-- 数字:不带任何逗号分隔符-- 货币: CCur(10000)-- 字符串: "hello” === hello“ "" hello "" ” === "hello""hello"(2) === "e""hello"(-5) === "h""604-555-1234"(1 to 3) === "604""abcdef"(-3 to -1) === "def"-- ⽇期,时间,⽇期时间#8/6/1978 1:20 am#CDateTime("8/6/1978 1:20 am")CDateTime("1:20 am")CTime(10,30,0) --- 分隔 hour,minute,secondCTime(#10:30 am#)7,范围-- 2 到 5 === 2 To 5 (包括2和5)-- 2 到 5 === 2 _To 5 (不包括2,包括5)-- ⼩于或等于 5 === Is <= 5-- ⽇期范围#8/6/1978 1:20 am# To #10/7/1978 1:20 am#Is <= #8/6/1978 1:20 am#8,数组-- Array(10,5,20)-- Array("aaa","bbb","ccc")-- Array(#8/6/1978 # To #10/7/1978# , #8/6/1978 #)-- Array(10,5,20)(2) === 59,变量-- Dim a AS Stringa = left({Customer.Fax}, 3)a = {Customer.Fax}(1 to 3)注释:全局变量只在1个报表中⽤,不包括⼦报表⼦报表要使⽤共享变量。
⽔晶报表传递参数及使⽤公式参数向⽔晶报表传递参数及使⽤公式参数下⾯的说明是关于向⽔晶报表⾥传递字符串类型参数和数字参数,以及⽤公式参数进⾏运算和转换。
阅读本站更多相关的⽂章:向⽔晶报表中传递参数,现在⽔晶报表中设置参数,然后把参数赋给选择公式CrystalDecisions.Shared.ParameterValues mypaVal = new CrystalDecisions.Shared.ParameterValues();CrystalDecisions.Shared.ParameterDiscreteValue mypaDVal = new CrystalDecisions.Shared.ParameterDiscreteValue(); mypaDVal.Value = 参数值;mypaVal.Add(mypaDVal);myrep.DataDefinition.ParameterFields[\"⽔晶报表中的参数\"].ApplyCurrentValues(mypaVal);第⼀步:⽣成数据集DataSet1.xsd,连好数据库,这在“⽔晶报表打印⼆”⾥⾯有详细说明,这⾥不再说明。
第⼆步:添加⼀个空⽩⽔晶报表CrystalReport1.rpt,在字段资源管理器中,右击“参数字段”选择“添加”,此处我们命名为p1(值类型为字符串),p2(值类型为数字,并且设为区域值),如下图:其它不做修改。
(图3.1)右击“公式字段”,选“新建”,新建两个为:f1和f2,确定后会出现“公式编辑器”如下图,先不做改变,保存后关闭。
(图3.2)第三步:将p1,p2拖⼊报表中,并保存报表。
第四步:编写代码。
在WebForm1.aspx中以CrystalReportViewer1为对象编写代码如下:// 声明将参数传递给// 查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();ParameterField paramField = new ParameterField ();ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();ParameterRangeValue rangeVal = new ParameterRangeValue ();// 第⼀个参数是具有多个值的离散参数。