Developer Express 之 XtraReport如何動態綁定數據


XtraReport報表編輯器里的保存,是可以保存為一個文件的,所以它應該提供了一個從文件加載的方法,這時我們可以發現XtraReport里有一個LoadLayout的方法,可以加載報表文件,它的重載方法是可以從IO.Stream里加載報表文件,也就是說,我們可以進一步的把這個報表模板以二進制的方式保存在數據庫里。需要的時候,從數據庫調用即可。

我們在設計XtraReport的模板的時候,重寫它的析構方法,一個有傳入數據源的,一個沒有。代碼如下:

 

 

Developer Express 之 XtraReport如何動態綁定數據

 

XtraReport報表編輯器里的保存,是可以保存為一個文件的,所以它應該提供了一個從文件加載的方法,這時我們可以發現XtraReport里有一個LoadLayout的方法,可以加載報表文件,它的重載方法是可以從IO.Stream里加載報表文件,也就是說,我們可以進一步的把這個報表模板以二進制的方式保存在數據庫里。需要的時候,從數據庫調用即可。

我們在設計XtraReport的模板的時候,重寫它的析構方法,一個有傳入數據源的,一個沒有。代碼如下:

      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");
        }填充數據代碼如下:        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;
        }其中關於主從表的話,因為傳進去的DaTaSet所以我們可以再外面把相應的關系指定好后加到DaTaSet。下面給出主從表的代碼:                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);而模板中綁定數據的話跟上面單表是的大同小異,但是里面的綁定要記得引用的是你綁定關系的外鍵,也就是,如下代碼:

        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");

            
        }

 

this.pProductName.DataBindings.Add("Text", DataSource, "fk_1.ProductName")以這句來說明,"fk_1.ProductName"
這個就是子表的數據字段,這部是主從表動態綁定的關鍵,這樣數據就會隨主表數據變化而變化。
 
http://www.cnblogs.com/CookBlack/archive/2010/12/06/1898099.html#2067923

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM