Developer Express 之 XtraReport如何动态绑定数据

XtraReport报表编辑器里的保存,是可以保存为一个文件的,所以它应该提供了一个从文件加载的方法,这时我们可以发现XtraReport里有一个LoadLayout的方法,可以加载报表文件,它的重载方法是可以从IO.Stream里加载报表文件,也就是说,我们可以进一步的把这个报表模板以二进制的方式保存在数据库里。需要的时候,从数据库调用即可。

我们在设计XtraReport的模板的时候,重写它的析构方法,一个有传入数据源的,一个没有。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public  XtraReport1()
   {
       InitializeComponent();
 
   } //数据预览是有用
  public  XtraReport1(DataSet ds) //构造函数重载
   {
       InitializeComponent();
       SetDataBind(ds);
   }
 
   private  void  SetDataBind(DataSet ds) //绑定数据源
   {
       DataSource=ds;  
       this .xrTableCell4.DataBindings.Add( "Text" , DataSource, "test1" );
       this .xrTableCell5.DataBindings.Add( "Text" , DataSource, "test1" );
   }
1
填充数据代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private  void  simpleButton1_Click( object  sender, System.EventArgs e)
{
 
     XtraReport1  xrpt1= new  XtraReport1(GetTempDataSet());
     xrpt1.ShowPreviewDialog();
}
private  DataSet GetTempDataSet()
{
     DataSet ds= new  DataSet();
     DataTable dt= new  DataTable( "tempTable" );
     dt.Columns.Add( "test1" ,Type.GetType( "System.String" ));
     dt.Columns.Add( "test" ,Type.GetType( "System.String" ));
     dt.Columns.Add( "test3" ,Type.GetType( "System.String" ));
     dt.Columns.Add( "test4" ,Type.GetType( "System.String" ));
     dt.Columns.Add( "test5" ,Type.GetType( "System.String" ));
     dt.Columns.Add( "test6" ,Type.GetType( "System.String" ));
     dt.Columns.Add( "test7" ,Type.GetType( "System.String" ));
     DataRow tempRow;             
     for  ( int  i=0;i<7;i++) //i:Row
     {
         tempRow=dt.NewRow();
         tempRow[0]=i.ToString();
         tempRow[1]=i.ToString();
         tempRow[2]=i.ToString();
         tempRow[3]=i.ToString();
         tempRow[4]=i.ToString();
         tempRow[5]=i.ToString();
         tempRow[6]=i.ToString();
         dt.Rows.Add(tempRow);
     }
 
     ds.Tables.Add(dt);
     return  ds;
}
1
其中关于主从表的话,因为传进去的DaTaSet所以我们可以再外面把相应的关系指定好后加到DaTaSet。
1
下面给出主从表的代码:
1
2
3
4
5
6
7
8
9
DataColumn parentColumns;
DataColumn childColumns;
parentColumns = ds.Tables[ "Suppliers" ].Columns[ "SupplierID" ];
childColumns = ds.Tables[ "Products" ].Columns[ "SupplierID" ];
DataRelation dsdr1 = new  DataRelation( "fk_1" , parentColumns, childColumns);
ds.Relations.Add(dsdr1);
 
DataRelation dsdr2 = new  DataRelation( "fk_2" , ds.Tables[ "Products" ].Columns[ "ProductID" ], ds.Tables[ "OrderDetails" ].Columns[ "ProductID" ]);
ds.Relations.Add(dsdr2);

而模板中绑定数据的话跟上面单表是的大同小异,但是里面的绑定要记得引用的是你绑定关系的外键,也就是,如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public  XtraReport1(DataSet ds)
{
     InitializeComponent();
     SetDataBing(ds);
}
private  void  SetDataBing(DataSet ds)
{
   
     DataMember = "Suppliers" ;
     DataSource = ds;
 
 
     this .cellCompanyName.DataBindings.Add( "Text" , DataSource, "Suppliers.CompanyName" );
     this .sContadName.DataBindings.Add( "Text" , DataSource, "Suppliers.ContadName" );
     this .sCountry.DataBindings.Add( "Text" , DataSource, "Suppliers.Country" );
     this .sContactTitle.DataBindings.Add( "Text" , DataSource, "Suppliers.ContactTitle" );
     this .sRegion.DataBindings.Add( "Text" , DataSource, "Suppliers.Region" );
     this .sPhone.DataBindings.Add( "Text" , DataSource, "Suppliers.Phone" );
     this .sCity.DataBindings.Add( "Text" , DataSource, "Suppliers.City" );
     this .sFax.DataBindings.Add( "Text" , DataSource, "Suppliers.Fax" );
     this .sPostalCode.DataBindings.Add( "Text" , DataSource, "Suppliers.PostalCode" );
     this .sHomePage.DataBindings.Add( "Text" , DataSource, "Suppliers.HomePage" );
     this .sAddress.DataBindings.Add( "Text" , DataSource, "Suppliers.Address" );
     this .sCompanyName.DataBindings.Add( "Text" , DataSource, "Suppliers.CompanyName" );
 
     DetailReport.DataMember = "fk_1" ;
     DetailReport.DataSource = DataSource;
 
     this .pProductName.DataBindings.Add( "Text" , DataSource, "fk_1.ProductName" );
     this .pProductID.DataBindings.Add( "Text" , DataSource, "fk_1.ProductID" );
     this .pCategory.DataBindings.Add( "Text" , DataSource, "fk_1.CategoryID" );
     this .pUnit.DataBindings.Add( "Text" , DataSource, "fk_1.QuantityPerUnit" );
     this .pUnitPrice.DataBindings.Add( "Text" , DataSource, "fk_1.UnitPrice" );
     this .pDiscontinued.DataBindings.Add( "Text" , DataSource, "fk_1.Discontinued" );
 
     DetailReport1.DataMember = "fk_1.fk_2" ;
     DetailReport1.DataSource = DataSource;
 
     this .oOrderID.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.OrderID" );
     this .oQuantity.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.Quantity" );
     this .oDiscount.DataBindings.Add( "Text" , DataSource, "fk_1.fk_2.Discount" );
 
     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
这个就是子表的数据字段,这部是主从表动态绑定的关键,这样数据就会随主表数据变化而变化。
转载http://www.cnblogs.com/CookBlack/archive/2010/12/06/1898099.html

猜你喜欢

转载自blog.csdn.net/jerryo/article/details/80552278