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 ...
随机推荐
- OpenSource
SugarCRM 客户关系管理系统(CRM).SugarCRM开源版是一款完全开放源代码的商业开源软件 OPENFILER 基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接 ...
- win2008 ent r2 开启端口
你好.win2008r2 ent 可以用以下命令行来实现,当然也可以用防火墙来配置 比如打开8080端口方法如下: netsh firewall add portopening TCP 8080 My ...
- mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...
- stickyListHeaders框架的使用
最近在Demo中使用到了stickyListHeaders框架实现悬停效果 比较好用 在xml中 <se.emilsjolander.stickylistheaders.StickyListHe ...
- array_column php 函数 自定义版本 php_version<5.5
<?php if(!function_exists('array_column')) { /* * array_column() for PHP 5.4 and lower versions * ...
- HDU 1231 (13.12.2)
Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...
- WebLogic SSRF 漏洞 (简要翻译)
[Ref]http://blog.gdssecurity.com/labs/2015/3/30/weblogic-ssrf-and-xss-cve-2014-4241-cve-2014-4210-cv ...
- Linux进程通信之System V共享内存
前面已经介绍过了POSIX共享内存区,System V共享内存区在概念上类似POSIX共享内存区,POSIX共享内存区的使用是调用shm_open创建共享内存区后调用mmap进行内存区的映射,而Sys ...
- 写在新建博客的第一天 分类: fool_tree的笔记本 2014-11-08 17:57 144人阅读 评论(0) 收藏
来CSDN开博客的目的有两个: 其一是因为CSDN的代码输出,看过一些博文,觉得这里的代码输出真的很漂亮: 其二则是因为,感觉自己印象笔记用久了之后,渐渐地几乎不再自己写些东西了,习惯了方便的剪藏插件 ...
- ExtractFileDir 与 ExtractFilePath 的差别
ExtractFileDir 与 ExtractFilePath 的差别 ExtractFileDir 从文件名称中获取文件夹名(文件不在根文件夹下时取得的值后没有"/",在根文件 ...