本指南演示了如何把报表绑定到只在运行时刻可用的数据。 当不能在设计时刻获取报表的数据源对象、但是想在设计时刻调整所有报表控件的绑定时,可以使用这种方法。
注意,仅当使用 System.Data.Dataset 对象作为数据源时,此处显示的这种方法 (使用数据源架构) 才能工作。 对于其他数据源类型,应使用在 如何: 在设计时刻把报表绑定到 List 对象并且在运行时刻提供数据 主题中描述的方法。
要在运行时刻为报表提供数据,则执行下列操作。
创建数据源架构
可以使用 WriteXmlSchema 方法来创建一个包含数据源架构的 XSD 文件。 例如:
C# | 复制代码 |
---|---|
nwindDataSet ds = new nwindDataSet(); ds.WriteXmlSchema(@"C:/Temp/1.xsd"); |
Visual Basic | 复制代码 |
---|---|
Dim ds As New nwindDataSet() ds.WriteXmlSchema("C:/Temp/1.xsd") |
现在,所创建的 XSD 文件可以被作为新报表的数据源架构使用。 例如,如果数据源包含 Northwind 示例数据库 (与 XtraReports 安装一起提供的 nwind.mdb 文件) 中的 Products 表,那么 XML 架构就像下面所示的那样:
XSD |
---|
<?xml version="1.0" standalone="yes"?> <xs:schema id="nwindDataSet" targetNamespace="http://tempuri.org/nwindDataSet.xsd" xmlns:mstns="http://tempuri.org/nwindDataSet.xsd" xmlns="http://tempuri.org/nwindDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:element name="nwindDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="Products"> <xs:complexType> <xs:sequence> <xs:element name="ProductID" msdata:AutoIncrement="true" type="xs:int" /> <xs:element name="ProductName" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="40" /> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="SupplierID" type="xs:int" minOccurs="0" /> <xs:element name="CategoryID" type="xs:int" minOccurs="0" /> <xs:element name="QuantityPerUnit" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="20" /> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="UnitPrice" type="xs:decimal" minOccurs="0" /> <xs:element name="UnitsInStock" type="xs:short" minOccurs="0" /> <xs:element name="UnitsOnOrder" type="xs:short" minOccurs="0" /> <xs:element name="ReorderLevel" type="xs:short" minOccurs="0" /> <xs:element name="Discontinued" type="xs:boolean" minOccurs="0" /> <xs:element name="EAN13" minOccurs="0"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="12" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:Products" /> <xs:field xpath="mstns:ProductID" /> </xs:unique> </xs:element> </xs:schema> |
使用数据源架构创建数据绑定报表
-
启动 MS Visual Studio (2005、2008 或 2010),并且新建一个或者打开一个现有的 Windows 窗体应用程序。
-
添加新空白报表 到项目中。 此报表将被用作继承报表的基本报表。
-
设置报表的 XtraReport.DataSourceSchema 属性。 要这样操作,则在 属性 窗口中找到 DataSourceSchema 属性,并且单击它的省略号按钮。 在被调用的对话框中,指定 XSD 文件路径并单击 确定 按钮。
-
现在数据源架构已经从该文件中恢复,您可以在 Field List(字段列表) 窗口中查看它的结构。
从 Field List(字段列表) 中把所需要的字段拖放到报表的细节带区,从而创建绑定到这些字段的报表控件。
-
在运行时刻创建(或获取) 相同类型的数据源实例,此类型已经在设计时刻被用于数据源架构中。
C# 复制代码 private void button1_Click(object sender, EventArgs e) { // Obtain a dataset or create a new one. // For example: nwindDataSet ds = new nwindDataSet(); new nwindDataSetTableAdapters.ProductsTableAdapter().Fill(ds.Products); // Create a report and bind it to a dataset. XtraReport1 report = new XtraReport1(); report.DataSource = ds; // Show the print preview. report.ShowPreview(); }
Visual Basic 复制代码 Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles button1.Click ' Obtain a dataset or create a new one. ' For example: Dim ds As New nwindDataSet() CType(New nwindDataSetTableAdapters.ProductsTableAdapter(), _ nwindDataSetTableAdapters.ProductsTableAdapter).Fill(ds.Products) ' Create a report and bind it to a dataset. Dim report As New XtraReport1() report.DataSource = ds ' Show the print preview. report.ShowPreview() End Sub
查看运行结果
现在报表 (及其控件) 已经被绑定到数据。 运行打印预览窗体,并查看结果。