在程序开发中,经常要对合并计算、多级汇总、制作图表、条件格式化进行编程。在这种情况下用普通的数据控件很难完成,而水晶报表大大简化了这些工作。用其可以制作非常漂亮的图表、格式化文本,而且还可以把报表导出为Word、Excel、PDF、HTML等格式。
6.1 水晶报表技术
水晶报表,英文名为“Crystal Report”,其主要功能是用来表现数据。要向用户展示数据可编写代码对记录集进行循环处理,并在Windwos应用程序或Web应用程序中输出这些数据。但是任何超出基本格式化的工作都会比较复杂,如很难对合并计算、多级汇总、制作图表以及条件、格式化等操作。
6.1.1 水晶报表及其数据源概述
报表最主要的目的,是将数据库与各类型文件之数据源中的数据,依照所需的格式打印出来。由此可知,如何设置报表的数据源是多么重要的一件事。Crystal Report for Visual Studio.NET支持目前业界广泛使用的各种数据源,使开发人员能顺利将现有的数据源显示在报表上。Crystal水晶报表通过数据库驱动程序与数据库进行连接,用户可以根据下列数据源中的数据进行报表设计:
l 使用ODBC驱动程序的任何数据库(RDO)。
l 使用OLEDB提供程序的任何数据库(ADO)。
l Microsoft Access数据库(DAO)。
l MicrosoftExcel工作薄(DAO)。
l ADO.NET记录集(DataSet)。
l ADO.NET记录集(Recordset)。
l CDO记录集(Recordset)。
l DAO NET记录集(Recordset)。
l RDO记录集(Recordset)。
Crystal Report报表提供了不同的数据源的同时,也提供了数据源的访问模式。Crystal Report报表的数据访问模式可以分为“提取模式”(Pull Model)与“推入模式”(Push Model)两种。
所谓的提取模式,也就是驱动程序会自行链接至数据库并视需要来提取数据。当采用提取模式时,Crystal Report本身将自动链接至数据库并执行用来提取数据的SQL命令,开发人员不需要另外编写代码。如果运行阶段并未编写特定的代码,则使用提取模式。
相反若采用推入模式,开发人员必须自行编写代码来链接至数据库,执行SQL命令来创建数据集或数据记录集,并将该对象传递给报表。
开发人员对数据源拥有更大的自主权与控制权。比方说,可以先过滤数据再将数据抟递给Crystal Report,或是与应用程序中的其他对象公用数据库键接。
报表引擎本身在功能上的限制,可挥洒的空间自然较大。推入模式的这一特性,使开发人员能够从不同的数据源中提取数据记录,并将它们提交给Crystal Report来加以打印。
基本上,若采用提取模式,将只能访问ODBC、OLEDB与ACCESS/EXCEL数据源;然而若采用推入模式,则可以通过ADO.NET、ADO、CDO、DAO与RDO来访问各种类型的数据源。
如果在开发程序中以推入模式使用ADO.NET数据集时,则报表必须使用Crystal Reports Engine对象模型。Crystal Reports Engine对象模型的特点就是允许开发人员在运行阶段对报表结构与内容进行完整的控制。因此如果应用程序需要在运行阶段动态控制报表内容,则该对象模型将是最佳的选择。在Visual Studio.NET 的CrystalDecisions.CrystalReports.Engine命名空间用来支持报表引擎。在ASP.NET程序中使用Crystal Reports Engine对象模型时必须引用CrystalDecisions.CrystalReports.Engine组件。当在项目中新创建一个Crystal Report报表或将一个现有的报表添加至项目中时,应用程序会自动引用CrystalDecisions.CrystalReports.Engine组件。如果必须要以手动的方式引用组件时,请从“项目”菜单中选择“添加引用”命令,弹出“添加引用”对话框,在对话框中双击“CrystalDecisions.CrystalReports.Engine”组件,如图6.1所示。

图6.1 引用“CrystalDecisions.CrystalReports.Engine”组件
CrystalDecisions.CrystalReports.Engine命名空间下包含如表6.1所示的类。这些类都拥有各自的成员,通过它们,使开发人员能够充分控制报表的结构与内容。
表6.1 CrystalDecisions.CrystalReports.Engine命名空间下包含的类
|
类 |
说明 |
|
Area |
表示报表中的区域。区域是报表中的一组相似的节,这些节具有相同的特性 |
|
AreaForma |
使您可以检索信息和为报表中的指定区域设置选项 |
|
Areas |
包含报表中的每个区域的 Area对象 |
|
BlobFieldObject |
表示报表上的 Blob 字段对象。该类使您可以检索表示特定字段对象类型的对象,还允许您设置从 ReportObject类继承的一般格式选项 |
|
BooleanFieldFormat |
使您可以获取和设置布尔值字段的布尔值输出类型 |
|
Border |
使您可以获取和设置报表中报表对象的边框选项 |
|
BoxObject |
表示已绘制在报表上的框 |
|
ChartObject |
表示报表上的图表对象 |
|
CommonFieldFormat |
使您可以设置为报表中的所有字段所共用的格式选项 |
|
CrossTabObject |
表示报表上的交叉表对象 |
|
Database |
提供属性,以获取有关报表访问的数据库的信息 |
|
DatabaseFieldDefinition |
表示报表中使用的数据库字段,并提供用于获取报表中的数据库字段信息的属性 |
|
DatabaseFieldDefinitions |
包含报表中的每个数据库字段的 DatabaseFieldDefinition对象 |
|
DataDefinition |
包含所有与数据操作有关的信息(数据操作依据报表中的数据源) |
|
DateFieldFormat |
使您可以获取和设置报表中日期字段的日期格式选项 |
|
DateTimeFieldFormat |
使您可以获取和设置报表中日期时间字段的日期和时间格式选项 |
|
DateTimeGroupOptions |
使您可以获取和设置报表中日期时间组的日期和时间选项 |
|
DrawingObject |
为各种绘图对象提供一般属性的基类 |
|
FieldDefinition |
为各种字段定义对象提供一般属性的基类 |
|
FieldFormat |
使您可以获取各种类型的字段格式对象,以获取和设置该字段的格式选项 |
|
FieldHeadingObject |
表示报表中的字段标题对象。该对象提供属性和方法,以检索信息和为报表中的字段标题对象设置选项 |
|
FieldObject |
表示报表上的“字段”对象。该类使您可以检索表示特定种类和类型的字段对象的对象,还允许您设置从 ReportObject类继承的一般格式选项。 |
|
FormulaFieldDefinition |
提供属性和方法,以检索信息和设置报表中任何命名公式字段的选项 |
|
FormulaFieldDefinitions |
包含报表中的每个公式字段的FormulaFieldDefinition对象 |
|
GraphicObject |
为各种图形对象提供一般属性的基类 |
|
Group |
提供属性,以检索组所依据的特定字段定义对象以及用于设置组的条件的 GroupOptions对象 |
|
GroupNameFieldDefinition |
提供属性以检索报表中组名字段的信息 |
|
GroupNameFieldDefinitions |
包含报表中的每个组名字段的GroupNameFieldDefinition 对象 |
|
GroupOptions |
为各种组选项对象提供一般属性的基类 |
|
Groups |
包含报表中的每个组的 Group对象 |
|
LineObject |
表示报表上绘制的线条对象。该类使您可以检索信息和设置从 DrawingObject类继承的一般格式选项 |
|
MapObject |
表示报表上的地图对象 |
|
NumericFieldFormat |
使您可以获取和设置报表中任何数字字段的数值格式选项 |
|
ObjectFormat |
使您可以获取或设置影响报表中对象的物理行为的格式选项 |
|
OlapGridObject |
代表报表上的 OLAP 网格对象。该类使您可以检索信息和设置从 ReportObject类继承的一般格式选项。 |
|
ParameterFieldDefinition |
表示报表中的参数字段。该对象提供属性和方法,以检索信息和设置报表中的参数字段的选项 |
|
ParameterFieldDefinitions |
包含报表中的每个参数字段的 ParameterFieldDefinition对象 |
|
PictureObject |
表示报表上的图片对象 |
|
PrintOptions |
提供用于设置报表打印选项的属性和方法 |
|
ReportDefinition |
使您可以检索报表中的所有Areas、ReportObjects和Sections |
|
ReportDocument |
表示一个报表,并且包含定义、格式化、加载、导出和打印该报表的属性和方法 |
|
ReportObject |
为各种报表对象提供一般属性的基类 |
|
ReportObjects |
包含报表中的每个报表对象的 ReportObject对象 |
|
ReportOptions |
使您可以获取和设置报表中的与数据有关的报表选项 |
|
RunningTotalFieldDefinition |
表示报表中使用的运行总和字段。该类提供属性以获取报表中的运行总和字段的信息 |
|
RunningTotalFieldDefinitions |
包含报表中的每个运行总计字段的 RunningTotalFieldDefinition对象 |
|
Section |
报表区域至少包含一个节。该类包括用于访问有关报表节的信息的属性 |
|
SectionFormat |
使您可以获取和设置节的格式选项 |
|
Sections |
包含报表中的每个节的 Section对象 |
|
SortField |
表示记录排序字段或组排序字段。该类提供属性以获取和设置报表中的排序字段的信息 |
|
SortFields |
包含报表中的每个排序字段的 SortField对象。 |
|
SpecialVarFieldDefinition |
提供属性以检索报表中的特殊字段的信息 |
|
SQLExpressionFieldDefinition |
提供属性,以检索报表中的 SQL 表达式字段的信息 |
|
SQLExpressionFieldDefinitions |
包含报表中的每个 SQL 表达式字段的 SQLExpressionFieldDefinition对象 |
|
SubreportObject |
表示放在报表中的子报表 |
|
Subreports |
包含报表中的每个子报表的 ReportDocument对象 |
|
SummaryFieldDefinition |
表示报表中使用的摘要字段。该类提供用于获取报表中的摘要字段信息的属性 |
|
SummaryFieldDefinitions |
包含报表中的每个摘要的 SummaryFieldDefinition对象 |
|
SummaryInfo |
使您可以获取和设置摘要报表信息 |
|
Table |
表示报表所访问的数据库表。该类提供属性和方法以获取表信息和设置表的登录信息 |
|
TableLink |
使您可以检索有关数据库表链接的信息 |
|
TableLinks |
包含报表中的每个表链接的 TableLink对象 |
|
Tables |
包含报表中的每个表的 Table对象 |
|
TextObject |
表示报表中的文本对象。该对象提供属性和方法,以检索信息和设置报表中的文本对象选项 |
|
TimeFieldFormat |
使您可以获取和设置报表中任何时间字段的时间格式选 |
|
TopBottomNSortField |
使您可以获取和设置 TopN 和 BottomN 排序字段的选项 |
当采用Crystal Reports Engine对象模型开发报表时,最常用的类就是ReportDocument类,该类被用来代表报表本身并且内含所有用来定义、载入、导出、格式化与打印报表的属性、方法与事件。
ReportDocument类常用公共属性及说明如表6.2所示。
表6.2 ReportDocument类常用公共属性及说明
|
属性 |
说明 |
|
Database |
获取Database 对象 |
|
DataDefinition |
获取DataDefinition 对象 |
|
DataSourceConnections |
包含报表中所有表连接信息的IConnectionInfo 对象的集合。不包括子报表 |
|
EnterpriseSession |
当RAS服务器由BusinessObjects Enterprise管理时,获取或设置对EnterpriseSession对象的引用 |
|
ExportOptions |
获取ExportOptions类实例 |
|
FileName |
指定报表文件的名称。如果指定协议或盘符,则假定使用默认的 "ras://" |
|
FilePath |
指定不带协议前缀的报表文件的名称 |
|
HasSavedData |
获取报表是否有保存在内存中的数据 |
|
IsLoaded |
获取该报表是否已使用 Load 方法加载 |
|
sSubreport |
获取该报表是否是子报表 |
|
Name |
获取报表的名称。对于主报表,该报表名称为空 |
|
ParameterFields |
获取参数字段 |
|
PrintOptions |
获取 PrintOptions 对象 |
|
RecordSelectionFormula |
获取或设置记录选定公式 |
|
ReportAppServer |
获取或设置报表应用程序服务器(也称为 RAS 服务器)的名称 |
|
ReportClientDocument |
ReportClientDocument 类是进入基础 Report Application Server API 的入口点。如果ReportDocument.ReportAppServer 未指向 Report Application Server,则此属性将抛出异常 |
|
ReportDefinition |
获取 ReportDefinition对象 |
|
ReportOptions |
获取ReportOptions对象 |
|
Subreports |
子报表。获取Subreports对象 |
|
SummaryInfo |
获取SummaryInfo对象 |
ReportDocument类常用公共方法及说明如表6.3所示。
表6.3 ReportDocument类常用公共方法及说明
|
方法 |
说明 |
|
Close |
关闭报表 |
|
EnableEventLog |
启用打印引擎的事件日志。默认情况下该日志未启用 |
|
Export |
将报表导出到在 ExportOptions对象内指定的格式和目标 |
|
ExportToDisk |
将报表以指定格式导出到文件中 |
|
ExportToHttpResponse |
将报表以指定格式导出到响应对象中 |
|
ExportToStream |
将报表以指定格式导出到流中 |
|
GetConcurrentUsage |
返回打开的并行作业个数,允许开发人员在应用程序中生成许可监视 |
|
Load |
加载一个新报表。如果已加载了一个报表,则关闭它并打开一个新报表 |
|
OpenSubreport |
打开报表中包含的子报表并返回与命名子报表对应的 ReportDocument对象 |
|
PrintToPrinter |
使用 PrintOptions.PrinterName 属性将报表的指定页输出到选定的打印机上。如果未选择打印机,则将使用报表中指定的默认打印机 |
|
Refresh |
删除保存的数据。这将导致随后查看报表时载入新数据 |
|
SaveAs |
将报表保存到指定的文件中 |
|
SetCssClass |
为各种节和报表对象设置级联式样式表 (CSS) |
|
SetDatabaseLogon |
利用用户名和密码设置数据库登录信息 |
|
SetDataSource |
将 Object 传递给报表引擎 |
|
VerifyDatabase |
检查数据库连接对于 ReportDocument 对象加载的报表是否是活动的 |
6.1.2 水晶报表外观设计技术
Crystal Reports提供了非常灵活的机制来自定义报表中对象的外观,比如数据库字段、文本对象公式。通过使用为这些对象准备的各种格式选项,开发人员可以改变报表的外观的各个方面,比如字体、大小、颜色、对齐方式及其他。
Crystal Reports提供“格式化编辑器”对话框来完成报表外观设计。“格式化编辑器”对话框是调整报表字段和其他报表对象外观的对话框。此对话框为Crystal Reports对象给出了不同的选项卡,并且每一个选项卡都提供具体的编辑功能。“格式化编辑器”对话框有以下几个选项卡。
(1)“公用”选项卡,此选项卡为报表对象提供了基本功能设置,如图6.2所示。

图6.2 “公用”选项卡
“公用”选项卡中常用格式化属性说明如下:
l 对象名称:被指定为默认名称,引用这个名称主要用于在“报表查看器”中查看报表的对象。
l CSS类名称:为Crystal Reports提供现有的CSS样式表类型的能力。
l 在水平页上重复:选择该项表示使用能够在每个其他的水平页面上,复制在水平方向上不能重复的对象。
l
抑制显示:使所选择的对象在“预览”选项卡和任何报表打印机上受到抑制显示。此选项常与判断公式一起使用,能抑制终端用户不想观看的字段,或只允许用户在条件满足情况下观看的字段。
按钮用于选择被抑制显示的字段,这些字段的显示基于所给定的某些数据条件。
l 将对象保持在一起:这个选项把一个对象保持在单一的页面上。
l 换页时关闭边框:这个功能保证对象的边框在每一页的底部关闭,当对象还在延续时,在下一页上再建边框。
l 可以扩大:在报表中能使可变长度的字段垂直扩大,并使单词自动换行。跟随这个选项“最大行数”可以限制混乱的或者太大的数据元素。
l 工具提示文字:当鼠标指针在报表字段上盘旋时,能显示一个文本提示。
l 文本旋转:可以使有关的对象旋转90度或者270度显示。
l 若重复则抑制显示:这项功能表示在报表中能够抑制显示重复的字段名称。
l 抑制嵌入式字段的空白行:这项功能表示在报表中能够抑制显示嵌入式字段的空白行。
(2)“边框”选项卡,此选项卡为报表格式化对象提供边框格式的设置,如图6.3所示。

图6.3 “边框”选项卡
“边框”选项卡中常用格式化属性说明如下:
l 线型:“左”、“右”、“顶部”、“底部”下拉列表为对报表对象边框提供了不同类型的边框线说明(单线、双线、短划线或点线)。
l 水平紧密:此选项功能表示,边框紧紧地包围在报表上有关对象的内容周围,而不是包围整个字段。
l 下落式阴影:此选项功能表示,在对象的右下边,画出下落式阴影。
l 边框颜色:指定边框和下落式阴影的颜色,从下拉列表中选择。
l 背景:给出指定字段显示的背景颜色,当该复选框被选择后,一个附加的对话框给出供选择的背景色。
(3)“字体”选项卡,此选项卡为报表格式化对象提供改变字体、字体大小和字体样式的功能,如图6.4所示。

图6.4 “字体”选项卡
“字体”选项卡中常用格式化属性说明如下:
l 字体、样式、大小、颜色:使设计者能够格式化对象字段文字的字体、样式、大小、颜色。
l 删除线、下划线:使设计者能够在当前报表对象上指定选择的格式化。
l 字符间的精确距离:指定每一个所选择字体占有的空间,用“0”示默认字符间距离。
(4)“段落”选项卡,此选项卡为报表格式化对象指定字符串或文本字段的格式化方式,包括间隔、阅读顺序和水平方式,如图6.5所示。

图6.5 “段落”选项卡
“段落”选项卡中常用格式化属性说明如下:
l 首行、左、右:使设计者能够格式对象字段在报表中缩进的格式。
l 行距:设计报表字段文字之间的间隔。
l 从左到右、从右到左:表示报表段落中文字的阅读顺序。
l 对齐:指所选段落文字的对齐方式。
(5)“超级链接”选项卡,此选项卡被用于建立与外部网站,电子邮件、文件或者其他报表的超级链接,以及当前报表内的报表对象与其他报表对象的超级链接,如图6.6所示。

图6.6 “超级链接”选项卡
“超级链接”选项卡中常用格式化属性说明如下:
l 无超链接:此选项表示当前对象没有超级链接,此选项默认选中。
l Internet上的网站:使用户可以用一个URL来指定一个外部网站。
l 当前网站或电子邮件字段值:创建一个链接到带有下划线的对象的网站或者电子邮件,这个对象已建立超级链接。
l
电子邮件地址:加入一个对电子邮件地址的链接,该地址需要输入到“电子邮件地址”文本框中,或通过
按钮进入“公式编辑器”输入。
l
文件:使链接的对象能够调用一个指定的文件,并且启动该链接的与终端用户相关的应用程序。可以通过
按钮进入“公式编辑器”后,报表人员可以编写带有命令行参数的EXE文件。
6.1.3 水晶报表排序、分组技术
报表数据的预设排列顺序会与数据库中的数据记录的存放顺序相同,因此会毫无规则且不会依照任何顺序来排列。Crystal Reports提供“记录排序专家”对话框来完成对报表数据的排序,如图6.7所示。

图6.7 记录排序专家
在“记录排序专家”对话框打开后,从“可用字段”列表中将要排序的字段移至右侧“排序字段”列表中,然后选择单选按钮“升序”或“降序”,以便对此字段进行“升序”或“降序”排序。
在指定排序字段时,应注意以下事项。
l 所有的字段都可以作为排序字段,包括数据库字段与公式字段。
l 用来排序的字段不一定要出现在报表上,不过一般来说,排序的目的是为了让报表上的数据明显地依照特定的顺序排列,所以排序字段最好是出现在报表上的字段。
如果以“文本”类型字段作为排序字段来“升序”排序,数据将依下列顺序来排列。
l 空白
l 标点符号
l 0~9
l A~Z(相同字母者,大写排在前,小字排在后)
l 中文字符按其拼音字母A~Z的顺序来排序
如果以“文本”类型字段作为排序字段来“降序”排序,则正好与上述的顺序相反。
如果以“日期/时间”类型字段作为排序字段来“升序”排序,则空日期时间排在最前,然后较早的日期时间排列在前,较晚的日期时间排列在后。“降序”排序则正好相反。
如果以“数字”或“货币”类型字段作为排序字段来“升序”排序,则较小的数值排列在前,较大的数值排列在后。“降序”排序则正好相反。
如果以“布尔值”类型字段作为排序字段来“升序”排序,则True会排列在前,False排列在后。“降序”排序则正好相反。
排序能够使报表中相同的数据排列在一起打印,但如果想让数据更加层次分明,并且根据针对各组的数据进行分析、统计、运算,则必须将报表中的数据进行分组。Crystal Reports允许根据数据库字段或公式字段来分组报表中的数据记录,而且还允许进行嵌套组、层次分组与自定义组等功能,以上功能通过Crystal Reports提供一系列的对话框,“插入组”对话框、“组专家”对话框、“层次组选项”对话框。
(1)“插入组”对话框
“插入组”对话框,主要是完成对报表分组的各项设置。在Report for Visual Studio.NETk 中启用“插入组”对话框,有以下两种方法。
l
使用鼠标单击工具栏的“插入组”按钮
,如图6.8所示。
l 使用鼠标右键单击任意报表节的空白外,并从弹出的快捷菜单中选择“插入/组”命令,弹出“插入组”对话框,如图6.9所示。
![]()
图6.8 工具栏启用“插入组”对话框

图6.9 “插入组”对话框
注意:在分组报表中数据之前,必须已设置报表的数据源。
打开“插入组”对话框后,在“排序和分组依据”两个下拉列表中指定组名字段与组名字段的排序顺序。
组名字段就是报表要分组的字段,组名字段可以是数据库字段或公式字段。
组名字段的排序顺序,有四种选择“按升序”、“按降序、“按指定顺序”和“按原始顺序”。
注意:组名字段的排序顺序并不是去设置该组中数据记录的排序顺序,而是设置报表要先打印出哪一个组的数据。
(2)“组专家”对话框
“组专家”对话框提供了可以同时添加多个分组,并提供了一个可以访问所有当前组的中枢位置。启用“组专家”对话框,使用鼠标右键单击任意报表节的空白外,并从弹出的快捷菜单中选择“报表/组专家”命令,弹出“组专家”对话框,如图6.10所示。

图6.10 “组专家”对话框
在这个对话框中,通过上
和下
两个箭头按钮,组可以很容易地被重新排序,这两个箭头按钮位于对话框的右上角。
(3)“层次组选项”对话框
“层次组选项”对话框能够使用户报表的数据动态地,按照数据分组层次显示在报表中。使用“层次组选项”对话框时,应当在报表中创建一个基础级数据分组。启用“层次组选项”对话框时,用鼠标右键单击任意报表节的空白外,并从弹出的快捷菜单中选择“报表/层次组选项”命令,弹出“层次组选项”对话框,如图6.11所示。

图6.11 “层次组选项”对话框
6.1.4 交叉报表设计技术
数据库报表设计器和电子表格应用程序是两种完全不同风格的产品。数据库报表设计器主要用于对数据分类和查询,而电子表格则用于分析、汇总和趋势预测,并表现为行列交叉的简明格式。Crystal Reports提供“交叉表专家”对话框,可以在指定范围内将上述两种特性组合在一起,这就是交叉表。如图6.12所示。

图6.12 “交叉表专家”对话框
在“交叉表专家”对话框的“交叉表”选项中,初始化交叉表的数据;在“样式”选项卡中为交叉表提供了一些外观样式,如图6.13所示;在“自定义样式”选项卡中,可以自定义交叉表的外观样式,可以控件交叉表背景色,网格线,数据的显示等等,如图6.14所示。

图6.13 “交叉表专家”对话框“样式”选项卡

图6.14 “交叉表专家”对话框“自定义样式”选项卡
6.1.5 带图表的水晶报表设计技术
在报表中使用图表,会让各项统计数据所蕴含的趋势、走向与彼此间的对比及差异等关系,更加令人一目了然。使用Crystal Reports图表和绘图功能,可以用彩色的直方图、饼图、三维图和其他方式的图形来显示数据库中的数据。Crystal Reports提供“图表专家”对话框来完成在报表中使用图表,“图表专家”对话框如图6.15所示。

图6.15 图表专家
“图表专家”对话框的“类型”选项卡中主要选择“图表”类型和图表在报表中显示的方向。打开“图表专家”对话框,首要工作就是决定是否要勾选复选框“自动设置图表选项”。该复选框默认处于勾选状态,表示图表的坐标轴、颜色、数据点、数据标记、图例与条形图大小等设置会采用默认值,如果希望自定义这些设置,请不要勾选复选框“自动设置图表选项”。图6.16所示,没有勾选“自动设置图表选项”复选框的效果。

图6.16 没有勾选复选框“自动设置图表选项”效果
“图表专家”对话框中的“数据”选项卡能够选择为图表指定数据和在报表中图表的定位。如图6.17所示。

图6.17 “数据”选项卡
“图表专家”对话框中的“文本”选项卡,用于指定图表标题,并且当图表被放在报表中格式化时显示的标题。如图6.18所示。

图6.18 “文本”选项卡
“图表专家”对话框中的“选项”选项卡,只有当“类型”选项卡上的“自动设置图表选项”复选框被取消后才能出现。此选项卡能够定制图表的颜色、数据点标签、图例位置、图例格式化选项和一些其他图表类型的特殊格式化选项。如图6.19所示。

图6.19 “选项”选项卡
“图表专家”对话框的“坐标轴”选项卡,只有当“类型”选项卡上的“自动设置图表选项”复选框被取消后才能出现。此选项卡能够定制图表的显示网格线、数据值缩放、数据值范围和数值划分。如图6.20所示。

图6.20 “坐标轴”选项卡
6.1.6 水晶报表导出数据技术
对象模型最常见的应用方法之一是运行报表并导出到另一种文件格式。ReportDocument对象是CrystalDecisions.CrystalReports.Engine命名空间下的成员类,它表示一个报表,并且包含定义、格式化、加载、导出和打印该报表的属性和方法。ReportDocument对象提供以下几种导出报表数据的方法。
l ExportToDisk方法
将报表以指定格式导出到文件中。这是导出报表最简单的方法;通过接受变量来指定导出格式类型和导出的文件名。在只需要导出一个文件到磁盘上的时候,这种方法很有用。
语法:
public virtual void ExportToDisk(CrystalDecisions.Shared.ExportFormatTypeformatType ,string fileName )
参数说明:
formatType:用来导出报表的格式类型。FormatType值是一个ExportFormatTypeformatType枚举类型值,ExportFormatTypeformatType枚举类型值及说明如表6.4所示。
FileName:用来导出报表的文件名。
表6.4 ExportFormatTypeformatType枚举值及说明
|
成员 |
说明 |
|
CrystalReport |
报表的导出格式是Crystal Report文件 |
|
Excel |
报表的导出格式是Microsoft Excel文件 |
|
ExcelRecord |
报表的导出格式是Excel记录文件 |
|
HTML32 |
报表的导出格式是HTML 3.2文件 |
|
HTML40 |
报表的导出格式是HTML 4.0文件 |
|
NoFormat |
未指定导出格式 |
|
PortableDocFormat |
报表的导出格式是PDF文件 |
|
RichText |
报表的导出格式是Rich Text文件 |
|
WordForWindows |
报表的导出格式是Microsoft Word文件 |
l ExportToStream方法
此方法只能接受一个单独的变量,导出格式类型。方法返回值是System.IO.Stream对象。
语法:
public virtual System.IO.Stream ExportToStream(CrystalDecisions.Shared.ExportFormatType formatType)
参数说明:
formatType:用来导出报表的格式类型。FormatType值是一个ExportFormatTypeformatType枚举类型值,ExportFormatTypeformatType枚举类型值及说明如表6.4所示。
返回值:包含字节序列形式的导出报表的流。
l ExportToHttpResponse方法
此方法将报表以指定格式导出到响应对象中。其有两种重载形式。
语法:
public virtual void ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType formatType,System.Web.HttpResponseresponse,bool asAttachment,string attachmentName);
参数说明:
formatType:用来导出报表的格式类型。FormatType值是一个ExportFormatTypeformatType枚举类型值,ExportFormatTypeformatType枚举类型值及说明如表6.4所示。
Response:页面的响应对象。
AsAttachment:指示是否将报表导出为响应的附件。
AttachmentName:用来导出报表的文件名。
Public virtual void
ExportToHttpResponse(CrystalDecisions.Shared.ExportOptions options,
System.Web.HttpResponse response ,bool asAttachment ,string attachmentName);
参数说明:
options:报表的导出选项。
response:页面的响应对象。
asAttachment:指示是否将报表导出为响应的附件。
attachmentName:用来导出报表的文件名。
ExportToHttpResponse()方法不支持导出为HTML32和HTML40格式的HTTP响应。因此,当尝试导出为HTML32或HTML40时,会出现错误消息。
如果asAttachment布尔值变量设置为True,则会出现“文件下载”对话框。如果asAttachment布尔值变量设置为False,导出的报表会在浏览器窗口中打开。
当选择保存文件时,文件名设置为attachmentName字符串变量。如果不指定attachmentName变量,则默认文件名为“无标题”,并带有指定的文件扩展名。可在“另存为”对话框中更改文件名。
l Export方法
将报表导出到在ExportOptions对象内指定的格式和目标。
语法:
public virtual void Export(CrystalDecisions.Shared.ExportOptions options);
参数说明:
options:导出报表的格式和目标。
此方法可以接受名为ExportOptions的对象作为变量,描述导出格式类型和目的类型。
ExportOptions对象是CrystalDecisions.Shared命名空间下的一个类,它提供属性,以便检索和设置用于导出报表的选项。
ExportOptions对象常用的属性及说明如表6.5所示。
表6.5 ExportOptions对象常用的属性及说明
|
属性 |
说明 |
|
DestinationOptions |
获取或设置 DestinationOptions |
|
ExportDestinationOptions |
获取或设置报表的导出目标选项 |
|
ExportDestinationType |
获取或设置导出目标类型 |
|
ExportFormatOptions |
获取或设置 FormatOptions |
|
ExportFormatType |
获取或设置导出格式类型 |
|
FormatOptions |
获取或设置 FormatOptions |
下面对比较重要的属性进行详细介绍。
(1)DestinationOptions属性
获取或设置DestinationOptions。
语法:
public object DestinationOptions{get; set;}
DestinationOptions对象包括DiskFileDestinationOptions、ExchangeFolderDestinationOptions或MicrosoftMailDestinationOptions对象。
l DiskFileDestinationOptions对象
检索和设置导出到磁盘时的文件名。如果将报表导出至一个磁盘文件,使用DiskFileDestinationOptions对象的DiskFileName属性来设置目的文件的完整路径与文件名称。
l ExchangeFolderDestinationOptions对象
检索和设置导出到Microsoft Exchange文件夹时的选项。如果将报表导出至Microsoft Exchange文件夹,应使用ExchangeFolderDestinationOptions对象的下列属性进行相关设置,如表6.6所示。
表6.6 ExchangeFolderDestinationOptions对象常用的属性及说明
|
属性 |
说明 |
|
DestinationType |
获取或设置导出目标类型 |
|
FolderPath |
获取或设置Exchange文件夹的路径,该文件夹用于导出到Exchange的报表 |
|
Password |
获取或设置Exchange密码 |
|
Profile |
获取或设置访问Exchange文件夹的用户配置文件,该文件夹用于导出到Exchange的报表 |
l MicrosoftMailDestinationOptions对象
提供属性,以便检索和设置导出到Microsoft mail时的选项。如果将报表导出至Microsoft mail,应使用MicrosoftMailDestinationOptionss对象的下列属性进行相关设置如表6.7所示。
表6.7 MicrosoftMailDestinationOptions对象常用属性及说明
|
属性 |
说明 |
|
MailCCList |
获取或设置通过电子邮件发送的报表的副本(抄送)列表 |
|
MailMessage |
获取或设置包含在通过电子邮件发送的报表中的电子邮件 |
|
MailSubject |
获取或设置要通过电子邮件发送的报表的电子邮件主题 |
|
MailToList |
获取或设置要通过电子邮件发送的报表的收件人列表 |
|
Password |
获取或设置登录电子邮件账户时所需的密码 |
|
UserName |
获取或设置登录电子邮件账户时所需的用户名 |
(2)ExportDestinationOptions属性
获取或设置报表的导出目标选项。
语法:
publicExportDestinationOptions ExportDestinationOptions {get; set;}
(3)ExportDestinationType属性
获取或设置导出目标类型。
public ExportDestinationType ExportDestinationType {get; set;}
ExportDestinationType是一个枚举类型,指定ExportOptions类的ExportDestinationType属性中的导出目标类型。ExportDestinationType枚举的值及说明如表6.8所示。
表6.8 ExportDestinationType枚举的值及说明
|
成员 |
说明 |
|
DiskFile |
导出目标指向磁盘文件 |
|
ExchangeFolder |
导出目标指向交换文件夹 |
|
MicrosoftMail |
导出目标指向Microsoft mail (MAPI) |
|
NoDestination |
未设置导出目标类型 |
(4)ExportFormatOptions属性
获取或设置 FormatOptions。
Public ExportFormatOptions ExportFormatOptions {get; set;}
ExportFormatOptions对象包括DiskFileDestinationOptions、ExchangeFolderDestinationOptions或MicrosoftMailDestinationOptions对象,其用法与说明请参见DestinationOptions属性。
(5)ExportFormatType属性
public ExportFormatType ExportFormatType {get; set;}
ExportFormatType是一个枚举值,指定ExportOptions类的ExportFormatType属性中的导出格式类型。
ExportOptions对象常用的方法及说明如表6.9所示。
表6.9 ExportOptions对象常用的方法及说明
|
方法 |
说明 |
|
ExcelAreaGroupNumber |
获取或设置基区域组号(如果该区域类型是组区域) |
|
ExcelAreaType |
获取或设置区域类型(如果不使用固定列宽度) |
|
ExcelConstantColumnWidth |
获取或设置列宽度 |
|
ExcelTabHasColumnHeadings |
获取或设置到Excel的导出,以具有列标题选项 |
|
ExcelUseConstantColumnWidth |
