嗯,最近客户需求变动,单据明细数量要超过一页。致使如今单据不符合需求(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页