最近研究了Crystal Report的报表开发,感觉非常好用。特将开发要点小结如下:
一、Crystal Report的几个重要组件
1、Crystal Report Designer
Crystal Report之所以“可见即所得”就是靠这个组件,Crystal Report Designer用于编辑.rpt报表文件。
2、Crystal Report Viewer
将Crystal Report Designer设计的报表展示在Web页面或Windows Form 上就是用到这个组件。
3、Crystal Report Engine
Crystal Report Engine允许开发人员在运行阶段对报表的结构与内容进行完整的控制,但是 Crystal Report Engine必须和Crystal Report Viewer一同使用。
二、理解报表节(Report Section)
1、报表页眉节
报表页眉节中的数据在整份报表中只出现一次,而且只会显示在第一页的上方。
2、页眉节
页眉节中的数据会固定显示在每一页的顶端。
3、详细资料节
显示报表实际信息,如果绑定的数据库表(DataSet)有多个记录,则这些记录都将显示在详细资料节中。
4、报表页脚节
报表页眉节中的数据在整份报表中只出现一次,而且只会显示在最后一页之详细资料节中最后一个数据记录的下方。
5、页脚节
页脚节中的数据会固定显示在每一页的尾端。
三、水晶报表的执行模式
1、Pull模式
被请求时生成报表时,驱动程序自动连接数据库,并视需要提取数据。一般,简单的报表用Pull模式就可以了。
2、Push模式
使用Push模式,开发人员必须自行编写代码来连接数据库,运行SQL命令来创建DataSet,并将DataSet传递给报表。Push模式比较灵活,并且效率高。
四、使用Push模式
1、设计一个DataSet
(1)“解决方案浏览器”,选择“添加”--“添加新项”--“数据集(DataSet)”--"命名为DSCustomer";
(2)从“服务器资源管理器”中的SQL Server中拖放一个数据表到DataSet(如CustomerList表),此时在DataSet中就会有一个CustomerList表的结构图,保存DataSet(这步不能忘)。(当然一个DataSet中可以有多个数据表)
2、创建.rpt文件
(3)“解决方案浏览器”,选择“添加”--“添加新项”--“Crystal Report“;
(4)建立.rpt文件之后,右击报表设计界面的空白处--"添加/删除数据库";
(5)在"数据库专家"窗口中,展开"项目数据"-"展开ADO.NET数据集"--"DSCustomer(DataSet)"--"选择CustomerList表";
(6)将"CustomerList"表填加到"选定的表中",点击"确定";
(7)设计报表界面,这时可以在界面中拖放CustomerList表中的字段;
3、建立一个Crystal Report Viewer控件,编写后台代码
(8)在.aspx页面上建立一个Crystal Report Viewer,根据需要设置其属性;
(9)在代码中访问数据库并把数据填充到DataSet;
private void BindReport()
{
RptRenderContract ReportDoc = new RptRenderContract();//.rpt文件对应的类
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["connStr"]);
DsCustomer ds = new DsCustomer(); //创建DataSet对象ds
string strSelect = "SELECT * FROM CustomerList ;
SqlDataAdapter dadCustomer = new SqlDataAdapter(strSelect,conn);
dadRender.Fill(ds,"CustomerList"); //向ds填充CustomerList表
ReportDoc.SetDataSource(ds); //设置.rpt文件对应类的数据源
CRVContract.ReportSource = ReportDoc; //设置Crystal Report Viewer的报表源
}
(10)在Page_Load方法中使用BindReport()函数。
五、Crystal Report的使用技巧
1、使用公式字段
Crystal Report的的公式编辑器,允许开发人员用Basic语法和Crystal(类Pascal)语法来编辑公式字段。Example,如下:
Dim strCpuType As String
Select Case {CpuLeaseList.CpuType}
Case 1
strCpuType = "惠普CPU"
Case 2
strCpuType = "曙光CPU"
Case 3
strCpuType = "苹果CPU"
End Select
formula = strCpuType
有点遗憾的是Crystal Report的公式编辑器没有提供函数的帮助说明,有些函数的用法需要猜了。比如获取日期字段中月份的公式为:
formula = Month({CpuLeaseList.LeaseStartTime})
总之,要开发出满足客户需求的复杂报表,必须熟练使用公式字段。
2、数据的排序
数据排序可以利用两种方式。
方式1--用SQL语句先排序,然后把排序好的数据绑定到报表。
方式2--利用Crystal Report的排序功能。右击报表设计界面的空白处--“报表”--“排序记录”--根据需要设置排序字段。
3、分组报表数据
个人认为,Crystal Report的分组报表的功能非常强大,内置了功能强大的根据字段分组的功能,这个功能非常好用,如果仅仅用SQL 语句的Group BY 有些功能是不能实现的。比如如下SQL 语句:
SELECT DateName(mm, LeaseStartTime) AS [Month], sum(datediff(hh,LeaseStartTime,LeaseEndTime)) AS [Hour] FROM CpuLeaseList where LeaseStartTime
BETWEEN '2006-1-1' AND '2006-12-31'
GROUP BY DateName(mm,LeaseStartTime)
SELECT 所能筛选出来的字段只能是和和 GROUP BY 跟这的相同字段或聚合函数运算的字段,但这个问题在Crystal Report分组报表中却很容易解决。
4、使用图表和交叉表
快速创建图表和交叉表也是Crystal Report的一大优点,只要在适当的节(sector)中插入图表或交叉表,然后设置一些要显示的字段就OK了。
5、报表的导出和打印
将报表集成在Web应用程序中,需要自己编写代码实现报表的导出和打印(报表在Windows应用中已经集成了导出和打印的功能).不过据说,在Visual studio 2005中Crystal report在Web中的应用也集成了导出和打印功能.
遗憾的是,Visual studio2003下面用代码实现导出和打印时,Crystal Report不是很稳定,有时会出现莫名其妙的运行时错误: ( 这个问题让我郁闷了好多天)
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
报表的导出需要注意的是:1)必须设置导出目录相应的安全权限,否则是无法往本地计算机的磁盘上写文件的. 2)如果要实现打印和导出时,每次Page_Load()必须要绑定DataSet上的数据到报表上去.(这一点要非常注意!)
导出代码如下:
private void btnExport_Click(object sender, System.EventArgs e)
{
CrystalDecisions.Shared.DiskFileDestinationOptions DiskOpts = new CrystalDecisions. Shared. DiskFileDestinationOptions();
ReportDoc.ExportOptions.ExportDestinationType = CrystalDecisions. Shared.ExportDestinationType.DiskFile;
switch (ddlFormat.SelectedItem.Text)
{
case "Rich Text (RTF)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.RichText;//
DiskOpts.DiskFileName = "D://Output.rtf";
break;
case "Portable Document (PDF)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;//
DiskOpts.DiskFileName = "D://Output.pdf";
break;
case "MS Word (DOC)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.WordForWindows;//
DiskOpts.DiskFileName = "D://Output.doc";
break;
case "MS Excel (XLS)":
ReportDoc.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.Excel;//
DiskOpts.DiskFileName = "D://Output.xls";
break;
default:
break;
}
ReportDoc.ExportOptions.DestinationOptions = DiskOpts;
ReportDoc.Export();
}
温馨提示:内容为网友见解,仅供参考
什么是C#水晶报表?
水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台做过报表开发的程序员,一定都对水晶报表强大、高效、集成等特性留下了深刻印象。 除了开发新程序外,在工作中我们常需要接触到很多较早的软件...
Crystal Reports: 如何成为报表软件业的标准并引领Java和国产报表软件...
Crystal Reports 是一套强大的Web报表制作工具,专为网络报表设计,旨在简化数据处理和分享过程。它将报表制作功能无缝融入Web和Windows应用,通过结合多样化的资料来源,确保生成的报告具有出色的简报质量。与Microsoft Office紧密结合,Crystal Reports 提供了高效快捷的报表处理能力,允许用户灵活地传输报表,满足...
怎样用c#.net制作水晶报表并且连接Oracle数据库
首先,在工具箱里面拖一个CrystalReportviewer控件,然后点击控件右侧三角箭头,可以去掉显示组树,然后选择则创建新Crystal报表,弹出创建新Crystal报表,默认确定,也可以自定义报表名称。第二,在CrystalReports库中选择使用报表向导,标准,确定。然后在弹出的创建报表向导中展开创建新连接,选择OLE DB,然后选择...
水晶报表打印动态列
水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll))水晶报表查看控件是一个WebForm控件,可以将它看成是一个在.aspx页面中存放报表的容器。 注意:在一些复杂的操作中,报表服务器与Web服务器可能不在同一物理主机上,Web服务器将HTTP请求传送到报表服务器上去。水晶报表也可...
Business Objects Crystal Reports V10 开发版(5用户)详细说明
Reports支持Report Parts和Microsoft Smart Tag,使得报表能够在门户、Office文档和无线设备上轻松访问、导航。先进的零客户端浏览器功能允许用户搜索报表数据,并能方便地导出为Excel、Word、PDF和HTML等格式,进一步扩展了报表的使用场景。至于版本号,本文提到的是Crystal Reports的详细说明,版本号为10。
开发crystal report报表要用什么语言
总之,要开发出满足客户需求的复杂报表,必须熟练使用公式字段。2、数据的排序 数据排序可以利用两种方式。方式1--用SQL语句先排序,然后把排序好的数据绑定到报表。方式2--利用Crystal Report的排序功能。右击报表设计界面的空白处--“报表”--“排序记录”--根据需要设置排序字段。3、分组报表数据 个人...
Business Objects Crystal Reports V10 高级开发版主要参数
Crystal Reports的灵活性体现在其Java、COM和.NET应用接口上,配合不同版本的Crystal Enterprise,能无缝集成到企业级Web应用,并通过零客户端浏览器控件提供丰富的报表交互功能。用户可以通过Report Parts和Smart Tag在Office XP中轻松查看、导航和修改报表。此外,零客户端浏览器支持数据搜索,用户可导出报表...
...oracle总是输出‘ 您请求的报表需要更多信息’
ReportDocument rd = new CrystalReport();ConnectionInfo ci = new ConnectionInfo()ci.ServerName="DNZX";ci.UserID = "user";ci.Password = "user";TableLogOnInfo tli = new TableLogOnInfo();tli.ConnectionInfo = ci foreach(Table tbCurrent in rd.Database.Tables){ tbCurrent.ApplyLog...
crystal calculate怎么用
要查看指向您的CrystalReports版本中的示例报表的完整路径通过“属性”窗口绑定到文件目录路径通过“属性”窗口绑定到文件目录路径请参见绑定到CrystalReportSource控件(VisualStudio2005中的网站)|所有方案的详细列表|SDK基础知识|CrystalReportViewer对象模型语言C#VisualBasic全部显示对象模型这个报表绑定方案使用Crystal...
crystal report 选择数据报表问题?
调用Sql,crystalreport.rpt会显示相应的记录 不必每个存储过程都要做一张报表 下面是我的简略代码,这个是调用一张表,显示表中所有字段,我报表中没选取字段 string strSqlConnection="Data Source=huaweimeng;User Id=sa;Password=1027;database=lab";string SqlString="select * ...