本文档介绍了使用 XtraReports 套件构建和发布报表的主要概念。 说明了使用 XtraReports 的要素,解释了如何创建报表,并描述了简单报表的结构。 要学习更多关于 XtraReports 中所使用的报表元素的内容,请参阅 报表带区 和 报表控件。
本文档由下列小节组成。
主要概念
XtraReports 中的每个报表都由 XtraReport 类的一个实例表示,或者由该类的子类来表示(这种情况更常见)。 因此,每个报表都作为 带区 的容器使用,而每个带区中都包含 报表控件。 大体上,XtraReports 与 Windows 窗体类似 —— 可以把报表添加到项目中,并且在 Visual Studio IDE 中以类似于使用标准窗体的方式来管理报表。
注意 |
---|
在本文档中,大部分自定义报表类都被命名为“XtraReport1”。 当 添加新空白报表 到项目中时,由 IDE 提供这一默认名称。 |
我们探讨一下在使用 XtraReports 的标准报表应用程序中报表的生命周期。 下面的图表阐明了这一概念。
XtraReports 中的每个报表都可以被绑定到数据,或者不绑定。 要创建绑定报表,则首先要把报表绑定到数据源,然后指定每个报表控件的数据绑定选项。 要学习更多关于如何创建绑定报表的内容,请参阅本文档中的 提供数据 和 把报表控件绑定到数据 章节。
注意,在设计时刻或运行时刻构建报表之后,就能把它保存为特定格式的 REPX 文件,并在后面重用 (要获得更多信息,请参阅 存储报表定义)。 同样,如果报表使用了样式表,那么就可以被保存为 REPSS 文件,并且在应用程序中的多个报表之间共享 (样式和样式取代 文档更详细地说明了这种方法)。
最后,甚至可以使用 XtraReports 向导,把不同报表系统 (MS Access、水晶报表或 Data Dynamics Active Reports) 创建的报表导入为等价的 XtraReports 类。 请参阅 导入 文档来学习如何执行此操作。
在构建报表类之后,就可以创建其实例,并以特定应用程序所要求的方式 导出报表。 注意,XtraReports 套件的目标平台是 Windows 窗体 和 ASP.NET,但是操作只是略有不同,这取决于报表应用程序的当前类型。 在 Windows 窗体应用程序中使用报表时,通常需要维护报表的 打印系统(PrintingSystem),此系统为报表的 预览、打印 和 导出 提供了额外的支持。 要学习如何在网站上发布报表,请参阅 ASP.NET 特殊事项 文档。
构建报表
如果使用 MS Visual Studio IDE 设计 .NET 应用程序,那么可以有不同的方式把新报表类添加到项目中。
-
第一种方法是使用相应的 报表项模板 添加新的空白报表,这些模板已经由 XtraReports 安装程序安装在 Visual Studio IDE 中。 大体上,如果要这样操作,则选择 项目 | 添加新项... 菜单项,并且在调用的对话框中选择 XtraReport 类 图标。 因为对于不同的应用程序类型,通过 XtraReports 模板添加新报表的操作步骤略有不同,因此请参阅下列指南之一,来学习更多关于把报表添加到特定应用程序中的细节:
- 另一种方法是使用 XtraReport Wizard 项模板来调用 报表向导。 当需要创建与下列报表类似的报表时,使用报表向导是较好的选择: 标准的数据感知报表 或 标签报表 (从 1500 多种预定义标签类型中选择一种)。 要查看运行报表向导的详细步骤,请参阅 调用报表向导 文档。
- 如果应用程序中已经包含一个可以作为新报表的基类的报表,那么就可以使用 Inherited XtraReport Class 项模板来创建继承的报表。 要查看这种方式的详细操作步骤,请参阅 如何: 创建继承的报表 指南。
- 如果您想重用一个报表,但是不想从它继承得到新报表,那么可以把此报表的定义保存到磁盘上的 REPX 文件中,然后创建一个新空白报表并且从之前保存的 REPX 文件中加载报表定义。 要这样做,则需要使用 Save(保存)... 和 Open/Import(打开/导入)... 操作项,这些操作项可以通过报表的 智能标记 调用。 要获得更多关于保存和加载报表的信息,请参阅 存储报表定义 文档。
- 如果需要从之前的报表系统迁移到 XtraReports,那么可以使用这最后一种方法。 如果之前使用 MS Access、水晶报表或 Data Dynamics Active Reports 设计了报表,那么就可以把旧报表导入到现有的 XtraReport 类的子类中。 但是,要注意在把第三方报表定义加载到 XtraReports 时,有一些限制。 要学习更多相关内容,请参阅 导入 文档。
在把新报表添加到项目中之后,Visual Studio IDE 就激活 XtraReports 设计器。 此设计器显示了报表结构,允许您管理 报表带区、添加新 报表控件(从 DX.10.2: Report Controls 工具箱项中添加)。 另外,报表设计器还提供了大量设计时刻元素,可以简化和加速报表创建过程。 其中含有允许导航报表的 报表资源管理器(Report Explorer) 窗口; 而 字段列表(Field List) 窗口则允许把数据字段拖放到报表中,从而创建数据绑定报表控件。 要学习更多关于 XtraReports 设计时刻元素的内容,请参阅 报表设计器 主题。
通常,一个报表类是分部定义的,从而允许 Visual Studio 在两个独立的文件中保存该类及其字段 —— 一个用于主要的类定义,另一个则用于存储由 Visual Studio 设计器生成的代码。
例如,XtraReport1.cs (或 XtraReport1.vb) 文件就如同下面所示的那样。
C# | 复制代码 |
---|---|
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using DevExpress.XtraReports.UI; namespace WindowsApplication1 { public partial class XtraReport1 : DevExpress.XtraReports.UI.XtraReport { public XtraReport1() { InitializeComponent(); } } } |
Visual Basic | 复制代码 |
---|---|
Public Class XtraReport1 End Class |
下面是典型的 XtraReport1.Designer.cs (或 XtraReport1.Designer.vb) 文件内容。
C# | 复制代码 |
---|---|
namespace WindowsApplication1 { partial class XtraReport1 { private System.ComponentModel.IContainer components = null; protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Designer generated code private void InitializeComponent() { components = new System.ComponentModel.Container(); this.Detail = new DevExpress.XtraReports.UI.DetailBand(); this.PageHeader = new DevExpress.XtraReports.UI.PageHeaderBand(); this.PageFooter = new DevExpress.XtraReports.UI.PageFooterBand(); ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); this.PageFooter.Height = 30; this.PageHeader.Height = 30; this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { this.Detail, this.PageHeader, this.PageFooter}); ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); } #endregion private DevExpress.XtraReports.UI.DetailBand Detail; private DevExpress.XtraReports.UI.PageHeaderBand PageHeader; private DevExpress.XtraReports.UI.PageFooterBand PageFooter; } } |
Visual Basic | 复制代码 |
---|---|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Public Class XtraReport1 Inherits DevExpress.XtraReports.UI.XtraReport <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub Private components As System.ComponentModel.IContainer <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() components = New System.ComponentModel.Container Me.Detail = New DevExpress.XtraReports.UI.DetailBand Me.PageHeader = New DevExpress.XtraReports.UI.PageHeaderBand Me.PageFooter = New DevExpress.XtraReports.UI.PageFooterBand CType(Me, System.ComponentModel.ISupportInitialize).BeginInit() Me.Detail.Name = "Detail" Me.PageHeader.Height = 30 Me.PageHeader.Name = "PageHeader" Me.PageFooter.Height = 30 Me.PageFooter.Name = "PageFooter" Me.Bands.AddRange(New DevExpress.XtraReports.UI.Band() {Me.Detail, _ Me.PageHeader, Me.PageFooter}) CType(Me, System.ComponentModel.ISupportInitialize).EndInit() End Sub Friend WithEvents Detail As DevExpress.XtraReports.UI.DetailBand Friend WithEvents PageHeader As DevExpress.XtraReports.UI.PageHeaderBand Friend WithEvents PageFooter As DevExpress.XtraReports.UI.PageFooterBand End Class |
注意 |
---|
如果有任何资源被存储在报表中,则相应的 .resx 文件 (例如 XtraReport1.resx) 被创建,该文件与主报表文件 (例如 XtraReport1.cs 或 XtraReport1.vb) 在相同的目录中。 |
注意,如果您使用的是网站项目,那么通过单个 .cs (或 .vb) 文件表示报表类,此文件必须被放置在 App_Code 目录中,并且在这种情况下没有 .Designer.cs (或 .Designer.vb) 文件。 对于 .resx 文件,则必须被放置在 App_GlobalResources 目录中。
构建报表的含义就是添加或删除报表带区,报表带区集合可以通过报表的 XtraReportBase.Bands 属性进行访问; 以及把不同的报表控件添加到带区中,这些控件被包含在带区的 XRControl.Controls 集合中。 注意,在 XtraReports 套件中,每个报表控件、报表带区 (及报表自身) 都是从 XRControl 基本类派生的。 在 主要类的层次结构 文档中详细讨论了这一概念。
例如,在设计器为 XtraReport1 生成的代码中,报表带区和控件都以下列方式被添加到报表中:
C# | 复制代码 |
---|---|
// Add Detail, PageHeader and PageFooter bands to the report's collection of bands. this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {this.Detail, this.PageHeader, this.PageFooter}); // Add two XRLabel controls to the Detail band. this.Detail.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {this.xrLabel1, this.xrLabel2}); |
Visual Basic | 复制代码 |
---|---|
' Add Detail, PageHeader and PageFooter bands to the report's collection of bands. Me.Bands.AddRange(New DevExpress.XtraReports.UI.Band() {Me.Detail, Me.PageHeader, Me.PageFooter}) ' Add two XRLabel controls to the Detail band. Me.Detail.Controls.AddRange(New DevExpress.XtraReports.UI.XRControl() {Me.XrLabel1, Me.XrLabel2}) |
发布报表
最后,在构建报表之后,就可以向最终用户发布。 要这样做,首先需要创建之前设计的报表类的一个实例。 例如:
C# | 复制代码 |
---|---|
XtraReport1 report = new XtraReport1();
|
Visual Basic | 复制代码 |
---|---|
Dim Report As New XtraReport1() |
C# | 复制代码 |
---|---|
// Show the form with the report's print preview. report.ShowPreview(); // Modally show the form with the report's print preview. report.ShowPreviewDialog(); // Print the report using the Print dialog. report.PrintDialog(); // Silently print the report to the default printer. report.Print(); |
Visual Basic | 复制代码 |
---|---|
' Show the form with the report's print preview. report.ShowPreview() ' Modally show the form with the report's print preview. report.ShowPreviewDialog() ' Print the report using the Print dialog. report.PrintDialog() ' Silently print the report to the default printer. report.Print() |
... 或者把它 导出 为下列格式之一...
C# | 复制代码 |
---|---|
// Export the report to PDF. report.ExportToPdf("report.pdf"); // Export the report to HTML. report.ExportToHtml("report.html"); // Export the report to MHT. report.ExportToMht("report.mht"); // Export the report to Text. report.ExportToText("report.txt"); // Export the report to CSV. report.ExportToCsv("report.csv"); // Export the report to XLS. report.ExportToXls("report.xls"); // Export the report to RTF. report.ExportToRtf("report.rtf"); // Export the report to Image. report.ExportToImage("report.bmp", System.Drawing.Imaging.ImageFormat.Bmp); |
Visual Basic | 复制代码 |
---|---|
' Export the report to PDF. report.ExportToPdf("report.pdf") ' Export the report to HTML. report.ExportToHtml("report.html") ' Export the report to MHT. report.ExportToMht("report.mht") ' Export the report to Text. report.ExportToText("report.txt") ' Export the report to CSV. report.ExportToCsv("report.csv") ' Export the report to XLS. report.ExportToXls("report.xls") ' Export the report to RTF. report.ExportToRtf("report.rtf") ' Export the report to Image. report.ExportToImage("report.bmp", System.Drawing.Imaging.ImageFormat.Bmp) |
... 甚至允许最终用户在 最终用户报表设计器 中编辑它。
C# | 复制代码 |
---|---|
// Edit the report in the End-User Designer.
report.ShowDesignerDialog();
|
Visual Basic | 复制代码 |
---|---|
' Edit the report in the End-User Designer.
report.ShowDesignerDialog()
|
Show Me |
---|
在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E925。 取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。 |