绿盟财报:Developer Express 之 XtraReport如何动态绑定数据 - Cook...

来源:百度文库 编辑:中财网 时间:2024/04/29 11:50:55

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

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

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

view sourceprint? 01 public XtraReport1() 02   { 03       InitializeComponent(); 04   05   } //数据预览是有用  06  public XtraReport1(DataSet ds)//构造函数重载 07   { 08       InitializeComponent(); 09       SetDataBind(ds); 10   } 11   12   private void SetDataBind(DataSet ds)//绑定数据源 13   { 14       DataSource=ds;    15       this.xrTableCell4.DataBindings.Add("Text", DataSource, "test1"); 16       this.xrTableCell5.DataBindings.Add("Text", DataSource, "test1"); 17   } view sourceprint? 1 填充数据代码如下: view sourceprint? 01 private void simpleButton1_Click(object sender, System.EventArgs e) 02 { 03   04     XtraReport1  xrpt1=new XtraReport1(GetTempDataSet()); 05     xrpt1.ShowPreviewDialog(); 06 } 07 private DataSet GetTempDataSet() 08 { 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")); 18     DataRow tempRow;               19     for (int i=0;i<7;i++)//i:Row 20     { 21         tempRow=dt.NewRow(); 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(); 29         dt.Rows.Add(tempRow); 30     } 31   32     ds.Tables.Add(dt); 33     return ds; 34 } view sourceprint? 1 其中关于主从表的话,因为传进去的DaTaSet所以我们可以再外面把相应的关系指定好后加到DaTaSet。 view sourceprint? 1 下面给出主从表的代码: view sourceprint? 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); 7   8 DataRelation dsdr2 = new DataRelation("fk_2", ds.Tables["Products"].Columns["ProductID"], ds.Tables["OrderDetails"].Columns["ProductID"]); 9 ds.Relations.Add(dsdr2);

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

view sourceprint? 01 public XtraReport1(DataSet ds) 02 { 03     InitializeComponent(); 04     SetDataBing(ds); 05 } 06 private void SetDataBing(DataSet ds) 07 { 08      09     DataMember = "Suppliers"; 10     DataSource = ds; 11   12   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"); 25   26     DetailReport.DataMember = "fk_1"; 27     DetailReport.DataSource = DataSource; 28   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"); 35   36     DetailReport1.DataMember = "fk_1.fk_2"; 37     DetailReport1.DataSource = DataSource; 38   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"); 42   43     this.oUnitPrice.DataBindings.Add("Text", DataSource, "fk_1.fk_2.UnitPrice"); 44   45        46 } view sourceprint? 1 this.pProductName.DataBindings.Add("Text", DataSource, "fk_1.ProductName")以这句来说明,"fk_1.ProductName" view sourceprint? 1 这个就是子表的数据字段,这部是主从表动态绑定的关键,这样数据就会随主表数据变化而变化。