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

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

注:红框里的ReportHeader和ReportFooter在一张单据只会出现一次,而ReportFooter回紧贴Detail之后
然后,如果超过每页的设定高度是,就成这样了
第一页

第二页

第三页

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

首先,点击左上角添加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页
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:DEV报表基础教程(二)-创新互联
文章网址:http://www.jxjierui.cn/article/jespe.html


咨询
建站咨询
