本主题介绍了在 XtraReports 中数据绑定的主要概念,并简述了为报表提供数据的多种方法。
本文档由下列小节组成。
数据绑定概述
通过 XtraReport 对象的 XtraReportBase.DataSource 属性把它绑定到数据源,而与特定的数据源类型和所使用的数据绑定方法无关。 唯一的例外是当使用 XML 数据源时,需要指派到 XtraReportBase.XmlDataPath 属性,同时要求把 XtraReportBase.DataSource 属性设置为 null。
另外,还可能需要使用 XtraReportBase.DataAdapter 属性。 在设计时刻和运行时刻,如果需要自动为数据集填充数据,而不是通过编写代码来填充,那么就需要使用此属性。 在这种情况下,如果 XtraReport 对象判定数据源为空,并且 DataAdapter 属性不是 null,那么它将调用 DataAdapter.Fill 方法。
如果数据源包含一个以上数据表,那么要使用 XtraReportBase.DataMember 属性,此属性指定数据源中的列表名称 (实现 IList 或 IListSource 接口的类的实例对象),通常为表。 在默认情况下,此属性被自动设置为数据源中的第一个表,但是可以根据需要改变其取值。
当在报表中生成 DataSet 对象时,则报表的 DataAdapter 和 DataSource 属性 (若当前它们被设置为 null) 将被自动初始化,其取值是所添加的数据源和数据适配器对象。
尽管报表可以只有一个对象被指派到 XtraReportBase.DataSource 属性,但是使用在 如何: 在一个报表文档中显示多个数据表 主题中说明的方法,可以把报表控件绑定到多个数据源中的数据。
当正在生成报表时,可以获取当前被访问的数据源中的取值 (例如在 XRControl.BeforePrint 事件处理程序中)。 要达到此目的,则调用 XtraReportBase.GetCurrentRow 和 XtraReportBase.GetCurrentColumnValue 方法。 请参阅 主/从报表 主题,来了解更多的关于这些方法如何用于从报表的信息。
注意 |
---|
因为圆点被 XtraReports 用于分隔不同数据项(数据源、表、关系、字段等) 的名称,因此在它们的名称中要避免使用圆点。 |
您可以避免使用数据源本身,而完全在 Visual Studio 设计时刻 (或者在 最终用户设计器 中) 设计报表,那样数据集的结构会被反射在 字段列表 中,就可以照常把报表控件绑定到所需的数据字段。 然后,在运行时刻加载现实数据。 要获得相关细节,请参阅 在设计时刻把报表绑定到数据,而不使用数据源。
在绑定报表之后,还需要把每个 data-aware(数据感知) 报表控件绑定到数据字段。 要获得相关细节,请参阅 标准的数据绑定。
数据绑定方法
取决于数据源的类型,有不同的数据绑定方法。 可以把报表绑定到数据库中的数据、XML 文件或在运行时刻创建的数据。 在下面说明了这些常规的数据绑定方法。
在下面引用的适当主题中,详细说明了这里列出的方法。
-
这种方法意味着数据被存储在数据库中。 使用已提供的两种数据适配器组件之一,就可以把报表绑定到这种数据:
- OleDbDataAdapter,使用 OLE DB 访问公开的数据源;
- SqlDataAdapter,被设计用于使用由 Microsoft SQL Server 7.0 或后续版本提供的数据源。
这些数据适配器都使用连接对象来绑定数据,并且能够生成包含数据表的 DataSet 对象。 然后通过把数据表 (或绑定到表的数据视图) 直接指派到 XtraReportBase.DataSource 属性,它们就可以被绑定报表。 也可以把生成的 DataSet 对象指派到 XtraReportBase.DataSource 属性,并且使用 XtraReportBase.DataAdapter 属性来指定数据适配器的名称。
-
在运行时刻创建的数据对象必须支持 IList、ITypedList 或 IBindingList 接口,并且被指派到 XtraReportBase.DataSource 属性。 注意,你不需要创建自定义的数据源对象。 例如,可以在运行时刻使用填充了数据的 DataTable 对象。
-
这种方法使用存储在 XML 文件中的数据。 可以以两种方式之一来访问这种数据。
- 把 XtraReportBase.DataSource 属性值设置为根据 XML 文件创建的数据集;
- 直接把 XML 文件指派到 XtraReportBase.XmlDataPath 属性。