DevExpress之XtraReport学习笔记
XtraReport
⼀、基本概念:
XtraReports 中的每个报表都由 XtraRepot 类的⼀个实例表⽰,或者由该类的⼦类来表⽰(这种情况更常见)。因此,每个报表都作为带区的容器使⽤,⽽每个带区中都包含报表控件。XtraReports 中的每个报表都可以被绑定到数据,或者不绑定。要创建绑定报表,则⾸先要把报表绑定到数据源,然后指定每个报表控件的数据绑定选项。报表控件、带区和报表⾃⾝的所有⼤⼩和位置,都以报表内相同的单位度量。度量单位由报表的 XtraReport.ReportUnit 属性指定,可以设置为下列类型之⼀:百分之⼀英⼨:当 ReportUnit 属性值被设置为ReportUnit.HundredthsOfAnInch 时使⽤。⼗分之⼀毫⽶:当 ReportUnit 属性值被设置为 ReportUnit.TenthsOfAMillimeter 时使⽤。⼆、页⾯构建时⽤到的事件
控件的使用Before Print:
在预览/打印/导出报表期间,在 XRControl 对象创建其图像之前,XRControl.BeforePrint 事件发⽣,主要⽤于以程序⽅式改变报表的属性、带区的属性、以及存放在 DetailBand 细节带区中的控件的属性。
在此事件中可以执⾏⼤部分任务 (例如改变 XRControl.Visible、XRControl.BackColor、XRControl.BorderColor 以及其他属性),可以被轻松执⾏,⽽⽆需编写代码,只是使⽤格式设置规则。此外,BeforePrint 事件可以被接管,从⽽重新指派控件的样式,并且调整其XRControl.LocationF 属性。
在 BeforePrint 事件中,可以使⽤ XtraReportBase.GetCurrentColumnValue ⽅法为数据绑定控件获取数据列的当前值。注意,在此事件中,修改控件的绑定信息就太迟了。因此,对于数据绑定控件,可以只调整其静态⽂本。
⽰例代码:
private void xrLabel1_BeforePrint(object sender, PrintEventArgs e)
{
if (Convert.ToDouble(this.GetCurrentColumnValue("UnitPrice")) > 30) {
XRControl control = this.FindControl("xrLabel1", true);
control.LocationF = new PointF(15F, 15F);
control.Styles.Style = this.StyleSheet[0];
}
}
三、报表结构
整个报表是由多个绑定带区组成,绑定带区如下:
绑定带区说明
TopMarginBand每个页⾯上⾯都显⽰的空⽩(天头),在
PageHeaderBand或者ReportHeaderBand上⾯
ReportHeaderBand在报表起始位置(报表头), 此带区被设计⽤于显⽰某些概
述信息,例如报表的封⾯。
PageHeaderBand在每个页⾯的上⽅(页眉),在TopMarginBand或者
ReportHeaderBand下⽅
GroupHeaderBand在每组的起始位置,或者在分跨多个页时⽽位于组的上⽅
(分组标头)。此带区指定分组标准,并被⽤于显⽰每组
记录起始位置的信息
DetailBand在页⾯上所有其他带区之间(细节)。此带区每⾏只显⽰
绑定数据源中的⼀条记录,或者当没有为报表指定数据源
时⽽简单地持有⾮绑定控件。
DetailReportBand在DetailBand的下⽅(从表),被设计⽤于在创建主/从报
DetailReportBand在DetailBand的下⽅(从表),被设计⽤于在创建主/从报
表时持有从报表
分组脚注)。此带区主要被设计⽤于显⽰每组的总结信ReportFooterBand(报表脚注)。此带区被设计⽤于显⽰某些PageFooterBand ReportFooterBand下⽅和
上⽅,此带区被设计⽤于从之前页⾯接
四、报表常⽤属性
属性说明
BackColor设置报表控件的背景⾊
Bands报表包含的带区,⽤于放置各种控件(集合)BorderColor报表中控件边框颜⾊
BorderDashStyle报表中控件边框样式
Borders报表中控件边框
BorderWidth边框宽度
CalculatedFiled计算字段,主要被⽤于 data-aware(数据感知) 报表中(集
合)
DataAdapter数据源Adapter对象
DataMember数据源中⽤于绑定报表的具体表
DataSource报表数据源
DataSourceSchema指定数据源框架⽂件(XML/XSD⽂件)
DesignerOptions ShowDesignerHints(bool):设计时显⽰提⽰ShowDesignerWarnings(bool):设计时显⽰警告提⽰ShowPrintingWarnings(bool):打印提⽰
DetailPrintCount设置打印的页数DetailPrintCountOnEmptyDataSource当数据源为空时打印的次数
DrawGrid(bool)设置是否要绘制对齐⽹格
ExportOptions⽤于设置报表导出时的相关属性(集合)FilterString报表数据过滤字符串
PageColor报表页⾯颜⾊
FormattingRules设置格式化样式
FormattingSheet格式化样式集合
PagerKind设置纸张类型
Parameters设置报表参数
PrintOnEmptyDatasource(bool)设置当数据源为空时是否打印RequestParameters(bool)设置是否在参数Submit后再创建报表SnapGridSize设置报表对齐⽹格⼤⼩
SnappingModel设置对齐模式(SnapToLines&SnapToGrid)SnapToGrid(bool)设置是否对齐到⽹格
StyleSheet设置控件引⽤的样式
StyleSheetPath设置引⽤外部样式⽂件
TextAlignment设置报表字体对齐⽅式
Watermark(属性集合)⽤于设置报表的⽔印,包括图⽚和⽂字XmlDataPath设置数据源为Xml⽂件的数据源路径
五、报表控件
报表控件在Web应⽤程序中分为Web页⾯控件和报表设计控件
1.Web页⾯控件
控件说明
ReportDocumentMap⽤于在Web页⾯显⽰报表中的书签,需要指定该控件的
ReportViewer属性。
ReportParameterPanel⽤于Web页⾯传递参数给报表,需要指定该控件的
ReportViewer属性。
ReportViewer⽤于Web页⾯呈现报表,需指定该控件的Report属性为
要显⽰的报表实例。
ReportToolbar与ReportViewer控件配合使⽤,实现翻页,打印,导出
等功能。
2.报表设计时控件:
控件说明
XRLabel标签控件,允许把单⾏或多⾏⽂本插⼊到报表中。此⽂本可
能是静态的,也可能是动态绑定。
XRCheckBox复选框控件,被设计⽤于在报表中显⽰ True/False 或选中/
未选中/不确定状态。
XRRichText富⽂本控件,被设计⽤于显⽰、输⼊和操作设置格式的⽂
本。
XRPictureBox图⽚框控件,⽤于显⽰报表中的图像。
XRPanel⾯板控件,可以包含其他报表控件。
XRTable表格控件,⽤于插⼊表格 (包括⾏和单元格)。
XRLine线条控件,⽤于在报表中绘制垂直线、⽔平线或斜线。
XRShape形状控件,⽤于把简单的图形嵌⼊到报表中。
XRBarCode条形码控件,允许把许多不同的条形码类型插⼊到报表中。
XRZipCode控件,允许把表⽰的数字插⼊到报表中。
XRChart图表控件,可以⽤于以图形视图呈现数据。
XRPivotGrid透视⽹格控件,⽤于以交叉表的形式呈现下层数据源中的数
据,从⽽创建交叉表报表。
XRPageInfo显⽰某些辅助信息的控件。使⽤此控件可以在报表中显⽰页
码、当前⽇期或⽤户信息。
XRPageBreak分页符控件,⽤作标记报表应开始新页⾯。
XRCrossBandLine可以跨多个带区的线条控件。
XRCrossBandBox可以跨多个带区的⽅框控件。
XRSubReport⼦报表控件,⽤于显⽰⼦报表。
六、报表类型
1. 静态报表是简单呈现某些静态信息的报表。这种报表通常不绑到数据源,并且在⼀页上显⽰单个控件或⼀组控件。如果需要多次重复
相同的报表内容,那么使⽤ XtraReportBase.DetailPrintCount 属性。
2. 表格报表是以表格形式呈现信息的报表。这些信息被存储在报表的绑定数据源中(也可以运⾏时从数据库中读取),并且通常此数据
源不分层级 (例如,只包含⼀个数据表)。使⽤ XRTable 控件,并且绑定表格的单元格来呈现数据源中的数据;
3. 主从报表如果某个报表被⽤于显⽰分层级的数据源中的数据,则通常把它称为主/从报表。创建主/从报表的两种主要⽅法。第⼀种⽅
法:是以使⽤从报表带区为基础(使⽤DetailReportBand带区),当数据源包含主实例和从实例之间的 ADO.NET 关系时,使⽤这种⽅法使⽤。第⼆种⽅法:是创建两个不同的报表类,并且把从报表作为⼦报表⽽合并到主报表中(使⽤XRSubReport控件,指定此控件的ReportSource属性为⼦报表)。
4. 多栏报表是以多个列或⾏ (取决于当前的多栏设置) 呈现数据的报表。这种报表是有⽤的,例如,当每个细节带区都只显⽰少量数据、
并且需要在⼀列的右侧打印下⼀个细节带区的外观时,这样就能充分利⽤整个页⾯宽度。此外,当创建有相同内容的卡⽚或邮寄地址签、并且需要在许多报表页⾯上打印⼤量相同尺⼨的卡⽚时,多栏报表也是有⽤的。
由于多栏布局主要影响报表的细节带区,因此可以通过 Detail 带区的 DetailBand.MultiColumn 属性来指定多栏模式。要启⽤多栏模式,则把 MultiColumn.Mode 属性设置为除去 None 之外的其他取值
栏数固定,栏宽度相同并且被⾃动计算。
为此,应该把 MultiColumn.Mode 属性设置为 MultiColumnMode.UseColumnCount,并把 MultiColumn.ColumnCount 属性设置为所需的栏数。
⾃动计算栏数,所有栏的宽度都是相同的固定宽度。
为此,应该把 MultiColumn.Mode 属性设置为 MultiColumnMode.UseColumnWidth,并且把 MultiColumn.ColumnWidth 属性设置为所需的
栏宽度。
1. 交叉表报表是以交叉表形式呈现信息的报表。交叉表 (或透视表) 类似于简单的普通数据绑定表格,但是改为在单个表格中呈现多维
的分层级的信息,并含有每⾏和每列的⾃动排序、计数、合计和累计。使⽤XRPivotGrid控件,并为此控件指定数据源、绑定字段到列,同时要保证报表的数据源为NULL,如果两者使⽤相同的数据源,那么XRPivotGrid控件将被打印与数据源⾏数相同的次数。
2. 6.      并列报表在报表中显⽰两栏相同的或者不同的信息,主要依赖于XRSubReport控件。
3. 7.      Drill-Through 报表类似于主从报表,但是⼦报表是通过超链接来访问的。超链接的设置将在下⾯数据绑定部分介绍。
4. 8.      邮件合并报表试图创建 e-mail 模板时,经常会遇到困难。在这些模板中,某些⽂本是不变的,某些字段 (通常被使⽤预定义的标
记括起来) 应该在创建⽂档时填充来源于数据库的数据。此项功能也被称为邮件合并,并且使⽤ XtraReports 可以轻松实现。
⼤体上,要创建嵌⼊字段,则需要把由 [中括号] 括起的数据字段名称插⼊到控件的⽂本中,如果在当前的数据上下⽂中,字段是有效的,那么当报表被预览或导出时,它将被替换为⼀个适当的数据值。
1. 9.      标签报表此报表与多栏报表相类似。
七、报表数据源
1.数据源
通过 XtraReport 对象的 XtraReportBase.DataSource 属性把它绑定到数据源,⽽与特定的数据源类型和所使⽤的数据绑定⽅法⽆关。唯⼀的例外是当使⽤ XML 数据源时,需要指派到 XtraReportBase.XmlDataPath 属性,同时要求把 XtraReportBase.DataSource 属性设置为null。
2.绑定数据的⽅法
2.1.使⽤ .NET 数据提供程序绑定报表
这种⽅法意味着数据被存储在数据库中。使⽤已提供的两种数据适配器组件之⼀,就可以把报表绑定到这种数据:
OleDbDataAdapter,使⽤ OLE DB 访问公开的数据源;
SqlDataAdapter,被设计⽤于使⽤由 Microsoft SQL Server 7.0 或后续版本提供的数据源。
这些数据适配器都使⽤连接对象来绑定数据,并且能够⽣成包含数据表的 DataSet 对象。然后通过把数据表 (或绑定到表的数据视图) 直接指派到 XtraReportBase.DataSource 属性,它们就可以被绑定报表。也可以把⽣成的 DataSet 对象指派到 XtraReportBase.DataSource 属性,并且使⽤ XtraReportBase.DataAdapter 属性来指定数据适配器的名称。
2.2.把报表绑定到 List
在运⾏时刻创建的数据对象必须⽀持 IList、ITypedList 或 IBindingList 接⼝,并且被指派到 XtraReportBase.DataSource 属性。注意,你不需要创建⾃定义的数据源对象。例如,可以在运⾏时刻使⽤填充了数据的 DataTable 对象。
2.3.把报表绑定到 XML 数据
这种⽅法使⽤存储在 XML ⽂件中的数据。可以以两种⽅式之⼀来访问这种数据。把 XtraReportBase.DataSource 属性值设置为根据 XML ⽂件创建的数据集;直接把 XML ⽂件指派到 XtraReportBase.XmlDataPath 属性。
⼋、数据绑定与报表预览
1.设计时绑定
在设计时绑定数据源,需要把相应的数据源添加到应⽤程序中,即在应⽤程序中添加DataSet程序集,然后在报表设计界⾯,把报表的数据源指定到相应的数据集上,打开Field List字段列表,将相应的字段⽤⿏标拖到相应的控件上即可。点击Preview 即可预览报表。
2.运⾏时绑定
在运⾏时绑定数据源,更具灵活性,它可以根据需要从数据库中读取有⽤的数据来呈现在报表上。对于运⾏时绑定数据源,其数据绑定操作要在报表的构造函数中完成。在报表设计器中只需把相应的控件放置好即可。报表控件中都有⼀个DataBindings属性,此属性的Add⽅法可以把数据绑定到控件上。
⽰例代码:
Void DataBind()
{
DataSource=tb  // tb为DataTable
xrLabel1.DataBinds.Add(”Text”,null,”Column1”);
xrLabel2.DataBinds.Add(”Text”,null,”Column2”,”FormatString:{0}”);
}
在报表的构造函数中调⽤以上⽅法就可以将数据绑定到xrLabel上,其中Add⽅法有两个重载:
Control.DataBinds.Add(控件属性,数据源,绑定字段)
Control.DataBinds.Add(控件属性,数据源,绑定字段,格式化设置)
每个控件可绑定的属性可能有所不同,可以通过该控件的DataBinds属性来查看。
3.Chart控件绑定
Chart控件与PivotGrid控件都需要独⽴指定数据源,同时,如果这两个控件被放置Detail带区中,报表不能指定数据源,不然,该控件将被显⽰与报表数据源⾏数相同的次数。
对与Chart控件的数据绑定,要把相应字段绑定到对应的Series上,ArgumentDataMember为X轴绑定字
段,ValueDataMembersSerializable为Y轴字段。
⼀个图表中可以有多个Series,可以通过Series索引或者Name来到相应的Series.Chart控件中Series集合表⽰图表,Titles集合是对应Series的标题。
⽰例代码:
protected void DataBind()
{
string sqlStr = "select UnitPrice,ProductName from ProductSales group by ProductName,UnitPrice";
}
九、数据呈现
由于数据源提供⽅式分为设计时与运⾏时,所以数据呈现也有所不同。对于运⾏时提供数据源的报表,分组、排序都需要通过代码添加到报表中,⽽设计时提供数据源则可以直接通过图形化界⾯进⾏设置。
1.数据分组与排序
运⾏时分组需要在数据绑定函数中加⼊如下代码:
this.GroupHeader1.GroupFields.Add(new GroupField("StudentID",XRColumnSortOrder.Descending));
GroupField的两个参数分别为分组字段,排序⽅式。
2.数据筛选
2.1.在报表级筛选
在报表中添加Parameters属性中添加筛选参数,并设置筛选条件,在Web页⾯上Parameters中的参数列表将被显⽰在ReportParameterPanel控件中,报表中添加参数以后,默认状态预览报表需要点击Submit后报表才被创建,若要不提供参数也创建报表,需要将报表的RequestParameters属性设置为false。
2.2.在数据源级筛选

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。