C1Report WinForms版提供了两种完全不同方式来生成报表:
使用 C1PrintDocument.ImportC1Report方法.
使用 C1Report组件.
虽然两种方式都可以正确的生成报表,但它们还是存在一些重要的区别。以下列出了一些关键的不同点。
数据绑定:
ImportC1Report方法创建了一个具有数据绑定的C1PrintDocument组件。C1PrintDocument组件依据获取的数据动态生成。当绑定的数据刷新时,生成的文档也会刷新。通过C1Report组件,数据在呈现的过程当中嵌入到文档中。生成的文档不具有绑定数据的能力(当然,可以重复生成报表以获取最新的数据)。
文档结构:
当通过导入方式生成报表,在生成的文档中,所有的字段均以RenderField呈现,并且所有的区域呈现为RenderSection 对象。当报表定义包含分组时,每一个分组呈现为一个RenderArea对象,分组页眉和和分组页脚呈现为嵌套的 RenderSection对象,嵌套的分组呈现为RenderArea对象。
当用C1Report组件生成报表时,每一个报表区域呈现为一个RenderArea对象。各字段按如下方式呈现:
- 当使用LineSlant组件时,会生成一个RenderLine对象;
- 当使用image或者barcode组件时,生成一个RenderImage对象;
- 当RTF设置为True时,生成RenderRichText对象;页面尺寸:
如果报表没有指定(或者设置为0)CustomWidth与CustomHeight属性,并且系统没有安装打印机,导入方式生成的报
表的默认页面尺寸则取决于不同的区域设置(比如,US和Canada使用Letter,而Russia使用A4)。这样的报表加载到
C1Report组件时,其页面尺寸将会设为Letter(8.5 x 11英寸),这是C1.Win.C1Report.C1Report的行为。
默认打印机:
如果系统安装有一个或多个打印机,通过导入方式生成的报表的默认页面尺寸使用与C1PrintDocument相同的逻辑(特别是可以通过MeasurementPrinterName属性指定要使用的打印机)。这样可以避免长时间等待系统默认的网络打印机。而C1Report组件生成的报表的默认页面尺寸取决于系统默认打印机。
导入方式的限制:
导入方式有一些不容忽视的固有限制。其中包括:
导入方式不能使用C1Report对象模型并且不会触发报表事件。因此导入方式最大的限制是:不能正确的呈现依赖于C#/VB事件处理程序的报表。
脚本限制:
- C1PrintDocument对象: o Font属性为只读。
- Field对象: o Section,Font和Subreport属性为只读。
- 不支持LineSpacing,SubreportHasData和LinkValue属性。LinkTarget属性中的表达式不会被求值,其原始的表达式文本将被保留。
- Layout对象:
- 不支持ColumnLayout属性,行列按照从上到下从左到右的顺序排列。 o 不支持LabelSpacingX,LabelSpacingY和OverlayReplacements属性。
- 在OnPrint处理程序中不能使用ForcePageBreak属性。
不会为包含参数的报表显示参数对话框。参数依据各自的参数类型选取默认值(数值类型为0,字符串类型为空字符串,日期类型为当前日期)。
不能在PageHeader/PageFooter中使用数据库字段。
在多栏报表中,表页眉只呈现在第一栏上(C1Report组件将跨多栏呈现表页眉)。
不支持从左到右排列分栏,只支持从上到下排列。
当C1Report中字段包含图片并且其CanGrow属性设置为True并且PictureScale属性设置为Clip时,它的宽度会和图片宽度相同。而导入方式中将字段的宽度按比例缩放到图片的宽度。
选择生成报表的方式
因为有两种生成报表的方式可供选择(使用C1Report组件和使用C1PrintDocument导入),您也许会有疑问"那种方式更适合?"。可以参考如下建议:
如果任何一条导入方式的限制是不可接受的(限制清单请参照"生成报表(C1Report vs.
C1PrintDocument)"),使用C1Report组件。
如果使用过以前版本的C1Report组件并且不熟悉C1PrintDocument对象模型,继续使用C1Preview提供的
C1Report组件。
如果有使用C1PrintDocument的经验,或者开始一个新的项目,基于以下考虑,使用导入方式是更好的选择。
C1PrintDocument集成:一个报表定义被导入到C1PrintDocument后,生成的文档可以当一个普通的
C1PrintDocument操作。比如,可以通过用户代码在文档中加入内容,修改文档属性等等。即使文档在刷新之后也会保留这些修改。
导入方式解决了C1Report组件中存在的一些问题;特别是,在C1Report中,side-by-side对象不能被正确的拆分在不同的页中,不能正确呈现被拆分在不同页中对象的边框。通过C1PrintDocument导入的报表不再有这些问题。
导入方式在内存和速度上都有较好的性能。
将来功能增强:将来的功能增强很可能只考虑导入方式。
开始使用报表
在本节中,你将学习到如何使用C1Report最基本的功能来创建简单报表。本节旨在帮助用户掌握如何快速、高效的应用
C1Report组件的基础功能,因此并没有对C1Report的全部功能进行深入的探讨。