嗯,最近客戶需求變動,單據明細數量要超過一頁。致使如今單據不符合需求(PS:這就是不參考之前成品的後果),還好,我想起來怎麼改了,如今寫出來,省的忘了。c#
之前的單據樣式(只能單頁,還要寫代碼補空行。。。。。。)ide
注:紅框裏的ReportHeader和ReportFooter在一張單據只會出現一次,而ReportFooter回緊貼Detail以後this
而後,若是超過每頁的設定高度是,就成這樣了spa
第一頁設計
第二頁3d
第三頁orm
徹底不能用啊。。。。。。blog
因此改造開始get
注:若是想要自定義紙張大小,記得把報表的PaperKind的值選爲Custom,而後PageHeight和PageWidth就能夠修改了,單位是像素。it
首先,點擊左上角添加DataSourse
設計頁面添加指定的報代表細
添加Table並綁定你想要的顯示的明細數據(注意要綁定的是主表下的明細表字段)
注意:最下方的是獨立空白,和Detail沒有任何關係,紅色單箭頭是表示分界線
而後在上方和下方添加lable而後綁定想要顯示的數據
(這樣就不須要用代碼補空行了,表頭和表尾在每頁都是固定位置)
注意:右上角的XRPageInfo的RunningBand設爲DetailReport
這樣這個頁數就會以該主表記錄下明細所佔的頁數爲分母
在報表的後臺添加以下代碼
public XtraReport1() { InitializeComponent(); //所有清空 this.dataSetForReport1.Clear(); //綁定MasterTable DataBindMaster(); //綁定DataBindClidren DataBindClidren(); } #region DataBindMaster private void DataBindMaster() { //清空MasterTable this.dataSetForReport1.MasterTable.Clear(); DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name"); dt.Columns.Add("Password"); //循環添加數據 for (int i = 0; i < 5; i++) { DataRow dr = dt.NewRow(); dr["ID"] = i; dr["Name"] = i.ToString(); dr["Password"] ="YDNZ14111200810"; dt.Rows.Add(dr); } //映射數據源 this.dataSetForReport1.MasterTable.Merge(dt); } #endregion #region DataBindClidren private void DataBindClidren() { //清空DataBindClidren this.dataSetForReport1.ClidrenTable.Clear(); DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("ClidrenID"); dt.Columns.Add("Comment"); //循環添加數據 for (int i = 0; i < 5; i++) { for (int j = 0; j < 55; j++) { DataRow dr = dt.NewRow(); dr["ID"] = i; dr["ClidrenID"] =j.ToString(); dr["Comment"] ="Comment " + j.ToString(); dt.Rows.Add(dr); } } //映射數據源 this.dataSetForReport1.ClidrenTable.Merge(dt); } #endregion
而後運行一下
總共5條主表記錄,275條明細記錄,
每頁最多顯示13條明細,總共25頁