嗯,最近客户需求变更,单据明细数量要超过一页。导致现在单据不符合需求(PS:这就是不参考以前成品的后果),还好,我想起来怎么改了,现在写出来,省的忘了。

以前的单据样式(只能单页,还要写代码补空行。。。。。。)

注:红框里的ReportHeader和ReportFooter在一张单据只会出现一次,而ReportFooter回紧贴Detail之后

然后,如果超过每页的设定高度是,就成这样了

第一页

第二页

第三页





完全不能用啊。。。。。。

所以改造开始

注:如果想要自定义纸张大小,记得把报表的PaperKind的值选为Custom,然后PageHeight和PageWidth就可以修改了,单位是像素。

首先,点击左上角添加DataSourse

设计页面添加指定的报表明细


添加Table并绑定你想要的显示的明细数据(注意要绑定的是主表下的明细表字段)

在最上方和最下方拉出一个空白区域


注意:最下方的是独立空白,和Detail没有任何关系,红色单箭头是表示分界线

然后在上方和下方添加lable然后绑定想要显示的数据

(这样就不需要用代码补空行了,表头和表尾在每页都是固定位置)

注意:右上角的XRPageInfo的RunningBand设为DetailReport

这样这个页数就会以该主表记录下明细所占的页数为分母

在报表的后台添加如下代码

publicXtraReport1(){InitializeComponent();//全部清空this.dataSetForReport1.Clear();//绑定MasterTableDataBindMaster();//绑定DataBindClidrenDataBindClidren();}#regionDataBindMasterprivatevoidDataBindMaster(){//清空MasterTablethis.dataSetForReport1.MasterTable.Clear();DataTabledt=newDataTable();dt.Columns.Add("ID");dt.Columns.Add("Name");dt.Columns.Add("Password");//循环添加数据for(inti=0;i<5;i++){DataRowdr=dt.NewRow();dr["ID"]=i;dr["Name"]=i.ToString();dr["Password"]="YDNZ14111200810";dt.Rows.Add(dr);}//映射数据源this.dataSetForReport1.MasterTable.Merge(dt);}#endregion#regionDataBindClidrenprivatevoidDataBindClidren(){//清空DataBindClidrenthis.dataSetForReport1.ClidrenTable.Clear();DataTabledt=newDataTable();dt.Columns.Add("ID");dt.Columns.Add("ClidrenID");dt.Columns.Add("Comment");//循环添加数据for(inti=0;i<5;i++){for(intj=0;j<55;j++){DataRowdr=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页