Crystal Report制作使用
Crystal Report制作使用
本文主要划分为以下六部分:
一、Crystal Report for .NET 的功能
二、Crystal Report总体结构
三、报表数据访问执行模式
四、报表类型
五、Crystal Report 设计器的布局
六、Crystal Report 的具体实例
最近项目接近尾声,应要求总结了一下,为了对在.net环境下开发报表的程序员新手一些帮助,同时也为给新人培训做一次文档准备。
相信在大部分的应用程序中报表都是程序员头疼的问题。但是在.net环境下包含了功能强大的报表工具: Crystal Report。它能很好的与数据库交互,做出各种漂亮的报表和分析图表.它能良好地替开发人员排忧解难。如下图:

从1993年开始,Crystal Report 就是Visual Studio 套件中的一部分。目前实际上已成为
Visual Studio.NET 中的报表标准,在Windows 报表编写领域中居于领先地位,推动着Web报表的未来发展。最新的Visual Studio.NET 以集成开发环境(IDE)中整和了Crystal Report9.0,从而增强了Visual Studio.NET 的开发功能, Crystal Report 为开发人员提供了尽可能的API。
一、Crystal Report for .NET 的功能
通过将Crystal Report 的报表处理功能整和到自己的数据库应用程序中,Windows应用程序和Web开发人员可以节省开发时间来满足用户的需求。Crystal Report 支持大多数流行的开发语言,可以方便的在任何应用程序中添加报表。
具体来说,Crystal Report的功能有以下几点:
1、全面的数据库访问:
Crystal Report 中包括了超过35中数据源驱动,可以访问一种XML、企业和关系型数据库。
2、广泛的设计格式与设计:
通过Crystal Report,用户可以将数据库转换为高度交互性内容。可以从100多中格式选项中进行选择、包括参数、映射、交叉表和超级链接、用以强化报表的冲击力。
3、强大的图表设计功能:
Crystal Report 可以在报表中包含多彩的、易读的图表(提供了非常丰富的报表类型,如:条形图、折线图、面积图、饼图、甘特图、股票图等)。
4、灵活的应用集成技术:
Crystal Report 带有灵活的Java、COM和.NET SDK,以及可内嵌的Report Application Server,可将报表与企业Web应用紧密地集成在一起。通过使用Crystal Report 的"零"客户端浏览器控制,能够为最终端拥护提供丰富的报表交互、创建和修改功能。
5、强大的报表导出:
Crystal Reprort 的所有的报表都可以导出多种不同的格式:包括XML、PDF、HTML、和Microsoft Excel。
二、Crystal Report总体结构
展示报表具有两层结构的Crystal Report需要:
界面:
界面仅需使用Winform窗体或者Web程序中使用浏览器。
后台:
1、Crystal Report Engine (CREngine.dll)
将数据与报表文件合并、将数据输出为不同的格式,将Crystal Report转为传到.aspx页中的简洁明了的HTML.
2、Crystal Report Designer (CRDesigner.dll)
使用Crystal Report Designer可以制作报表,可以设计标题、插入数据、公式、表格、次级报告等。
3、The .rpt Report file
将一份报表应用到你的应用程序中的第一步是使用Crystal Report Designer创建报表。但是如果已经有了一些现成的样本,你现在就可以用它。
4、The Data Source
.rpt文件获取数据的方式取决于你所选用的方法。你可以选择制作Crystal Report以获取数据而无须手工写任何代码,也可以选择绑定你的dataset并将其传入报表文件。
5、Crystal Report Viewer
Crystal Report Viewer是一个能够插入页中的容器(.net中习惯称为控件)。
三、报表数据访问执行模式
1、拉模型 Pull Model
在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。
2、推模型 Push Model
相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。
四、报表类型
Crystal Report Designer可以是独立于解决方案的报表外,也可是装载包含于解决方案方案之中的报表。
1、Strongly-typed Report :
当在方案中加入一个报表时,该报表就成为一个Strongly-typed Report。在这种情况下,你可以直接创建报表实例(可以减少若干代码),可以将其隐藏。当然你可以点击Solution Explorer中的”show all files”来显示它。
2、Un-Typed Report :
不包含在方案中的报表即Un-Typed Report。在这种情况下,必须创建一个Crystal Report Engine的''Report Document''对象并将报表手工装载进去。
五、Crystal Report 设计器的布局
首先,在Visual Studio.NET 的一个工程中添加一个向 Windows 或 Web 窗体发布数据的 Crystal 报表文件:

添加成功之后,打开该报表:

从上图可以看到设计器的完整布局。
1、字段资源管理器:
列出该报表所有的字段,如:使用的数据库字段、参数字段、公式字段等。可以在此修改和删除字段对象。
2、主报表窗口:
用来在报表窗口中显示主报表。对于包含子报表的报表,有主报表窗口和对每个的深化(通过双击)的子报表有一个
子报表窗口。可以通过右击报表窗口的任何空白位置来启动报表快捷菜单。
3、水晶报表主工具栏:
包括记录选择、分类和文本对象格式化图标。可以对整个工具栏移动或改变大小。
4、水晶报表插入工具栏:
可以插入汇总字段、组、子报表、图表和图片的图标。也可以在Crystal Report工具栏中单击鼠标来选择"插入"。
六、Crystal Report 的具体实例
本部分的例子分成两部分:Windows应用程序中的Crystal Report开发;Web应用程序中的Crystal Report开发应用。并且在两种环境下分别介绍拉模型与推模型的例子。
在本部分例子中使用的软件环境:Microsoft Visual Studio 2005;Microsoft SQL Server 2005。数据例子如下:服务器:cotton-b数据库名:lhcy数据库表:ProjectStage
数据表结构:

数据:

主要功能为统计项目阶段工时数。
1、如何设计报表文件模版。
1) 增加一个结果集 DataSet1.xsd,并增加表

2) 首先在增加一个报表文件 rpt文件

3) 使用报表专家,在"项目数据"中选择"ADO。NET数据集",插入"ProjectStage"表,在字段选择器上选择要在报表上

4) 选择要分组的字段依据

5) 选择展示的图表和显示的主题信息

最终生成的结果如下。

2、Windows应用程序中的Crystal Report开发
2.1 拉模型 pull model 的demo
在拉模式中如要在水晶报表中的SQL语句加上条件参数时要用{?参数名}方式给出。
例:“SELECT ProjectID, Manhours FROM ProjectStage Where ProjectID ={?parm}” parm就是参数名.
private void Form1_Load(object sender, EventArgs e)
{
ReportDocument rpt=new ReportDocument();
rpt.Load(Application.StartupPath + "CrystalReport.rpt");
//SetDatabaseLogon 拉模式中必须用这个方法来设置登录信息,参数一:用户//名;参数二:密码;参数三:服务器;参数四:数据库名
rpt.SetDatabaseLogon("sa","123456", "cotton-b", "lhcy");
// 给水晶报表传参数,参数一:是参数名,参数二:参数值;
rpt.SetParameterValue("Parm", 1);
rpt.SetParameterValue("Title", "拉模型demo");
//CrystalReportViewer1是水晶报表浏览器,下面是给该浏览器赋上对像
crystalReportViewer1.ReportSource = rpt;
}

2.2推模型 push model的demo
在推模式中编程组装的Dataset里的SQL语句中的字段要与水晶报表里的SQL语句字段一致。简单的说,推模式中的水晶报表是个模板,把在设计器里报表的格式设好后,再组装DataSet就可以生成报表了。
private void Form1_Load(object sender, EventArgs e)
{
CrystalReport1 report = new CrystalReport1();
string sDBConnetction = "Data Source=cotton-b;Initial Catalog=lhcy;Persist Security Info=True;User ID=sa;Password=123456";
DataSet1 ds = new DataSet1();
SqlConnection conn = new SqlConnection(sDBConnetction);
SqlDataAdapter adapterProjectStage = new SqlDataAdapter
("select * from ProjectStage where ProjectID=2", conn);
adapterProjectStage.Fill(ds, "ProjectStage");
report.SetDataSource(ds);
report.SetParameterValue("Title", "推模型demo");
crystalReportViewer1.ReportSource = report;
}

3、Web应用程序中的Crystal Report开发
3.1 拉模型 pull model 的demo
与Winform应用程序的拉模型一样,要在水晶报表中的SQL语句加上条件参数时要用{?参数名}方式给出。
例:“SELECT ProjectID, Manhours FROM ProjectStage Where ProjectID ={?parm}” parm就是参数名.
protected void Test_pullmodel (object sender, EventArgs e)
{
// CrystalReport.rpt是水晶报表文件的名称;CrystalReportSource1是从工具箱加到页面上的水晶报表数据源对像。
CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
// SetDatabaseLogon 拉模式中必须用这个方法来设置登录信息,参数一:用户名;参数二:密码;参数三:服务器;参数四:数据库名
CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa","123456", "cotton-b", "lhcy");
//给水晶报表传参数,参数一:是参数名,参数二:参数值;
//CrystalReportSource1.ReportDocument.SetParameterValue("Title", "拉模型的demo");
CrystalReportSource1.ReportDocument.SetParameterValue("Parm", 1);
//绑定水晶报表数据源。
CrystalReportSource1.DataBind();
// CrystalReportViewer1是水晶报表浏览器,下面是给该浏览器赋上对像
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportViewer1.DataBind();
}

3.2推模型 push model的demo
string sDBConnetction = "Data Source=cotton-b;Initial Catalog=lhcy;Persist Security Info=True;User ID=sa;Password=123456";
DataSet1 ds = new DataSet1();
SqlConnection conn = new SqlConnection(sDBConnetction);
SqlDataAdapter adapterProjectStage = new SqlDataAdapter("select * from ProjectStage where ProjectID=2", conn);
adapterProjectStage.Fill(ds, "ProjectStage");
CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["ProjectStage"]);
CrystalReportSource1.DataBind();
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportViewer1.DataBind();

Crystal Report制作使用的更多相关文章
- Crystal Report在.net中的两种显示方式
Crystal Report在.net中的两种显示方式 编写人:CC阿爸 2014-7-29 近来在完成深圳一公司的项目,对方对各方面要求相当严格,一不满意就拒绝签收,为了对修正水晶报表显示及导出的一 ...
- 2.ASP.NET MVC 中使用Crystal Report水晶报表
上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...
- Crystal Report 遇到需要登录的问题
解决方式: The advices for crystal report database connection settings: 1, Using ApplyLogOnInfo method in ...
- c# 中crystal report输出PDF文件
工程中引入以下crystal report的类库crystaldecisions.crystalreports.enginecrystaldecisions.reportsourcecrystalde ...
- [转]解决crystal report水晶报表在浏览器提示bobj未定义的错误
网上的中文文章(比如这篇文章)都是写的部署到服务器后出现的问题,同时也指出要把crystal report的aspnet_client文件夹拷贝到对应项目的根目录里,这样就可以正常显示了,但是具体到我 ...
- check whether the crystal report runtime is exists 检查crystalreport运行时是否存在
1. Try Dim rptDoc As New CrystalDecisions.CrystalReports.Engine.ReportClass() Dim rptView As New Cry ...
- 解决crystal report水晶报表在浏览器提示bobj未定义的错误
网上的中文文章(比如这篇文章)都是写的部署到服务器后出现的问题,同时也指出要把crystal report的aspnet_client文件夹拷贝到对应项目的根目录里,这样就可以正常显示了,但是具体到我 ...
- 解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序
原文:[原创]解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序 我更换了新的电脑,操作系统也从原来32位的windows 2003 R2升级到windows 2 ...
- Visual Studio 2012使用水晶报表Crystal Report
原文:Visual Studio 2012使用水晶报表Crystal Report SAP在 2013年1月14日 released SAP Crystal Reports,developer ver ...
随机推荐
- java多线程编程(3)买票
1,买票非同步版本 http://www.cnblogs.com/anbylau2130/archive/2013/04/17/3025347.html很详细 public class 多线程2 { ...
- 1‘b0 什么意思
在看datasheet 中有类似表达式如下: 3'b000, 1'b1, 1'b0; 3'b000这个表示:b代表二進制.3代表位元數. 1'b1:宣告為一位元二進制之值為1,一般除了可以宣告b外,也 ...
- 关键字 final
package com.zyw.reusableClass; import java.util.Random; /** * Created by zyw on 2016/3/26. * from th ...
- 《A First Course in Probability》-chaper7-极限定理-强大数定理
在现实问题中我们对于一个实验往往会重复成千上万次,那么我们就需要关注在实验次数趋于无穷之后,整个实验的期望会趋于怎样一个结果.其实这一章“极限定理”都是在处理这个问题. 强大数定理: 这里的证明过程给 ...
- 《A First Course in Probability》-chape4-离散型随机变量-方差
为了描述一组数据的均值,我们引入了数学期望的概念,为了描述一组数据相对均值的波动情况,我们引入了方差. 能够看到,方差的本质也是一个期望,那么我们就能够利用期望的定义将其继续展开. 方差的一条重要性质 ...
- 【转】Gabor 入门
Computer Vision Tutorials Search Primary Menu Skip to content Tutorials Search for: Gabor Filters ...
- first blog编程之美-----计算1的个数
根据以下总结写出以下程序,总结来源于网上 感想:得硬着头皮找规律 #include int count1(int n) { int i=1; int count=0 ...
- 三分钟读懂Oracle数据库容灾架之DataGuard
Oracle数据库目前依然处于商用数据库的霸主地位. 运行在Oracle数据库上的核心业务及核心数据的安全性尤为重要. 目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle ...
- git常用操作指令
git操作master : 默认开发分支:origin : 默认远程版本库 添加远程仓库:git remote add [name] [url] 通常name为origin 克隆远程仓库:git c ...
- Intellij IDEA 导入Eclipse或MyEclipse的Web项目(旧版 转载)
Intellij IDEA 导入Eclipse或MyEclipse的Web项目 博客分类: Intellig IDEA Intellij IDEAEclipseWeb Intellij IDEA 导 ...