XtraReport报表编辑器里的保存,是可以保存为一个文件的,所以它应该提供了一个从文件加载的方法,这时我们可以发现XtraReport里有一个LoadLayout的方法,可以加载报表文件,它的重载方法是可以从IO.Stream里加载报表文件,也就是说,我们可以进一步的把这个报表模板以二进制的方式保存在数据库里。需要的时候,从数据库调用即可。
我们在设计XtraReport的模板的时候,重写它的析构方法,一个有传入数据源的,一个没有。代码如下:
03 | InitializeComponent(); |
06 | public XtraReport1(DataSet ds) |
08 | InitializeComponent(); |
12 | private void SetDataBind(DataSet ds) |
15 | this .xrTableCell4.DataBindings.Add( "Text" , DataSource, "test1" ); |
16 | this .xrTableCell5.DataBindings.Add( "Text" , DataSource, "test1" ); |
01 | private void simpleButton1_Click( object sender, System.EventArgs e) |
04 | XtraReport1 xrpt1= new XtraReport1(GetTempDataSet()); |
05 | xrpt1.ShowPreviewDialog(); |
07 | private DataSet GetTempDataSet() |
09 | DataSet ds= new DataSet(); |
10 | DataTable dt= new DataTable( "tempTable" ); |
11 | dt.Columns.Add( "test1" ,Type.GetType( "System.String" )); |
12 | dt.Columns.Add( "test" ,Type.GetType( "System.String" )); |
13 | dt.Columns.Add( "test3" ,Type.GetType( "System.String" )); |
14 | dt.Columns.Add( "test4" ,Type.GetType( "System.String" )); |
15 | dt.Columns.Add( "test5" ,Type.GetType( "System.String" )); |
16 | dt.Columns.Add( "test6" ,Type.GetType( "System.String" )); |
17 | dt.Columns.Add( "test7" ,Type.GetType( "System.String" )); |
22 | tempRow[0]=i.ToString(); |
23 | tempRow[1]=i.ToString(); |
24 | tempRow[2]=i.ToString(); |
25 | tempRow[3]=i.ToString(); |
26 | tempRow[4]=i.ToString(); |
27 | tempRow[5]=i.ToString(); |
28 | tempRow[6]=i.ToString(); |
1 | 其中关于主从表的话,因为传进去的DaTaSet所以我们可以再外面把相应的关系指定好后加到DaTaSet。 |
1 | DataColumn parentColumns; |
2 | DataColumn childColumns; |
3 | parentColumns = ds.Tables[ "Suppliers" ].Columns[ "SupplierID" ]; |
4 | childColumns = ds.Tables[ "Products" ].Columns[ "SupplierID" ]; |
5 | DataRelation dsdr1 = new DataRelation( "fk_1" , parentColumns, childColumns); |
6 | ds.Relations.Add(dsdr1); |
8 | DataRelation dsdr2 = new DataRelation( "fk_2" , ds.Tables[ "Products" ].Columns[ "ProductID" ], ds.Tables[ "OrderDetails" ].Columns[ "ProductID" ]); |
9 | ds.Relations.Add(dsdr2); |
而模板中绑定数据的话跟上面单表是的大同小异,但是里面的绑定要记得引用的是你绑定关系的外键,也就是,如下代码:
01 | public XtraReport1(DataSet ds) |
03 | InitializeComponent(); |
06 | private void SetDataBing(DataSet ds) |
09 | DataMember = "Suppliers" ; |
13 | this .cellCompanyName.DataBindings.Add( "Text" , DataSource, "Suppliers.CompanyName" ); |
14 | this .sContadName.DataBindings.Add( "Text" , DataSource, "Suppliers.ContadName" ); |
15 | this .sCountry.DataBindings.Add( "Text" , DataSource, "Suppliers.Country" ); |
16 | this .sContactTitle.DataBindings.Add( "Text" , DataSource, "Suppliers.ContactTitle" ); |
17 | this .sRegion.DataBindings.Add( "Text" , DataSource, "Suppliers.Region" ); |
18 | this .sPhone.DataBindings.Add( "Text" , DataSource, "Suppliers.Phone" ); |
19 | this .sCity.DataBindings.Add( "Text" , DataSource, "Suppliers.City" ); |
20 | this .sFax.DataBindings.Add( "Text" , DataSource, "Suppliers.Fax" ); |
21 | this .sPostalCode.DataBindings.Add( "Text" , DataSource, "Suppliers.PostalCode" ); |
22 | this .sHomePage.DataBindings.Add( "Text" , DataSource, "Suppliers.HomePage" ); |
23 | this .sAddress.DataBindings.Add( "Text" , DataSource, "Suppliers.Address" ); |
24 | this .sCompanyName.DataBindings.Add( "Text" , DataSource, "Suppliers.CompanyName" ); |
26 | DetailReport.DataMember = "fk_1" ; |
27 | DetailReport.DataSource = DataSource; |
29 | this .pProductName.DataBindings.Add( "Text" , DataSource, "fk_1.ProductName" ); |
30 | this .pProductID.DataBindings.Add( "Text" , DataSource, "fk_1.ProductID" ); |
31 | this .pCategory.DataBindings.Add( "Text" , DataSource, "fk_1.CategoryID" ); |
32 | this .pUnit.DataBindings.Add( "Text" , DataSource, "fk_1.QuantityPerUnit" ); |
33 | this .pUnitPrice.DataBindings.Add( "Text" , DataSource, "fk_1.UnitPrice" ); |
34 | this .pDiscontinued.DataBindings.Add( "Text" , DataSource, "fk_1.Discontinued" ); |
36 | DetailReport1.DataMember = "fk_1.fk_2" ; |
37 | DetailReport1.DataSource = DataSource; |
39 | this .oOrderID.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.OrderID" ); |
40 | this .oQuantity.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.Quantity" ); |
41 | this .oDiscount.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.Discount" ); |
43 | this .oUnitPrice.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.UnitPrice" ); |
1 | this .pProductName.DataBindings.Add( "Text" , DataSource, "fk_1.ProductName" )以这句来说明, "fk_1.ProductName" |
1 | 这个就是子表的数据字段,这部是主从表动态绑定的关键,这样数据就会随主表数据变化而变化。 |