本指南描述了如何把 Web 报表绑定到自定义对象数据源,并在网页中显示。 此数据源通过 System.Colections.ArrayList 对象表示 ,在运行时刻此对象被填充数据。 ArrayList 实现使得项目易于理解,因为不需要创建有 IList、ITypedList 或 IBindingList 接口的自定义对象。
尽管本示例展示的是运行时刻绑定列表的方法,但是当绑定到运行时刻创建的对象时,也可以利用设计时刻报表的所有优点。 要获得如何完成此任务的在线示例,请参阅下面的示例: 在设计时刻如何使用自定义对象集合作为数据源,为 Web 报表设置绑定 。
要在运行时刻把 Web 报表绑定到 ArrayList,则执行下列操作。
创建 Web 应用程序
-
启动 MS Visual Studio (2005、2008 或 2010),并且新建一个或者打开一个现有的 ASP.NET Web 应用程序。
-
切换到 Default.aspx 页面的 设计 视图,并把 ReportToolbar 和 ReportViewer 控件从 DX.10.2: Reporting 工具箱标签页中拖放到此页面上。
-
为了相互链接控件,把 ReportToolbar1 的 ReportToolbar.ReportViewer 属性设置为 ReportViewer1。
注意 不要在设计时刻指派 ReportViewer 的 ReportViewer.Report 属性。 应该在运行时刻通过代码来指派。
声明数据源并把它绑定到报表
-
为了把有默认类声明的文件添加到项目中,在 Visual Studio IDE 的主菜单的 项目 菜单中,选择 添加类...
然后,在被调用的 添加新项 对话框中,单击 添加 按钮。
-
把默认的 Class1 声明,替换为下面给出的代码。 它声明了一个有 ID、Name 和 Age 公共属性的类。 这些属性将作为数据源字段。
C# 复制代码 public class Record { int id, age; string name; public Record(int id, string name, int age) { this.id = id; this.name = name; this.age = age; } public int ID { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } }
Visual Basic 复制代码 Public Class Record Dim _id, _age As Integer Dim _name As String Public Sub New(ByVal id As Integer, ByVal name As String, ByVal age As Integer) Me._id = id Me._name = name Me._age = age End Sub Public Property ID() As Integer Get Return _id End Get Set(ByVal Value As Integer) _ID = Value End Set End Property Public Property Name() As String Get Return _name End Get Set(ByVal Value As String) _name = Value End Set End Property Public Property Age() As Integer Get Return _age End Get Set(ByVal Value As Integer) _age = Value End Set End Property End Class
-
因为我们的数据是在运行时刻提供的,因此也要在运行时刻把数据绑定控件添加到报表中。 为了完成此任务,在 XtraReport1 类中实现 AddBoundLabel 方法。 下列代码应被插入到 XtraReport1 类的定义中。
C# 复制代码 using System.Drawing; using DevExpress.XtraReports.UI; // ... public void AddBoundLabel(string bindingMember, Rectangle bounds) { // Create a label. XRLabel label = new XRLabel(); // Add the label to the report's Detail band. Detail.Controls.Add(label); // Set its location and size. label.Location = bounds.Location; label.Size = bounds.Size; // Bind it to the bindingMember data field. label.DataBindings.Add("Text", DataSource, bindingMember); }
Visual Basic 复制代码 Imports System.Drawing Imports DevExpress.XtraReports.UI ' ... Public Sub AddBoundLabel(ByVal bindingMember As String, ByVal bounds As Rectangle) ' Create a label. Dim label As New XRLabel() ' Add the label to the report's Detail band. Detail.Controls.Add(label) ' Set its location and size. label.Location = bounds.Location label.Size = bounds.Size ' Bind it to the bindingMember data field. label.DataBindings.Add("Text", DataSource, bindingMember) End Sub
要获得更多关于绑定报表控件的信息,请参阅 标准的数据绑定 主题。
发布报表
-
现在,我们实例化报表,创建数据源并把它绑定到报表。
下面的代码定义了 CreateReport 函数。 此函数为 ArrayList 装载记录,并把它指派到报表的 XtraReportBase.DataSource 属性。 然后,把三个 XRLabel 对象添加到报表的 DetailBand(细节带区),并把它们绑定到不同的数据字段。
把 CreateReport 函数放置在 Default.aspx 页面的 code-behind(代码隐藏) 文件中。
C# 复制代码 using System.Collections; using DevExpress.XtraReports.UI; // ... XtraReport CreateReport() { // Create a list. ArrayList listDataSource = new ArrayList(); // Populate the list with records. listDataSource.Add(new Record(1, "Jane", 19)); listDataSource.Add(new Record(2, "Joe", 30)); listDataSource.Add(new Record(3, "Bill", 15)); listDataSource.Add(new Record(4, "Michael", 42)); // Create a report. XtraReport1 report = new XtraReport1(); // Bind the report to the list. report.DataSource = listDataSource; // Add bounded labels to the Detail band of the report. report.AddBoundLabel("ID", new Rectangle(100, 20, 100, 30)); report.AddBoundLabel("Name", new Rectangle(200, 20, 100, 30)); report.AddBoundLabel("Age", new Rectangle(300, 20, 100, 30)); return report; }
Visual Basic 复制代码 Imports System.Collections Imports DevExpress.XtraReports.UI ' ... Private Function CreateReport() As XtraReport ' Create a list. Dim listDataSource As ArrayList = New ArrayList() ' Populate the list with records. listDataSource.Add(New Record(1, "Jane", 19)) listDataSource.Add(New Record(2, "Joe", 30)) listDataSource.Add(New Record(3, "Bill", 15)) listDataSource.Add(New Record(4, "Michael", 42)) ' Create a report. Dim report As XtraReport1 = New XtraReport1() ' Bind the report to the list. report.DataSource = listDataSource ' Add bounded labels to the Detail band of the report. report.AddBoundLabel("ID", New Rectangle(100, 20, 100, 30)) report.AddBoundLabel("Name", New Rectangle(200, 20, 100, 30)) report.AddBoundLabel("Age", New Rectangle(300, 20, 100, 30)) Return report End Function
-
为了使 ASP.NET 应用程序能正确工作,当页面控件被初始化或被加载时,调用 CreateReport 函数,并把返回的报表对象指派到 ReportViewer1 控件。 在 Default.aspx 页面的 code-behind(代码隐藏) 文件中使用下列代码。
C# 复制代码 protected void Page_Load(object sender, EventArgs e) { ReportViewer1.Report = CreateReport(); } protected override void OnInit(EventArgs e) { base.OnInit(e); ReportViewer1.Report = CreateReport(); }
Visual Basic 复制代码 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) ReportViewer1.Report = CreateReport() End Sub Protected Overrides Sub OnInit(ByVal e As EventArgs) MyBase.OnInit(e) ReportViewer1.Report = CreateReport() End Sub
查看运行结果
现在 Web 报表已经就绪。 运行应用程序,并查看结果。
Show Me |
---|
在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E951。 取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。 |