DevExpress主从表 按组分页一组不足一页为一页--以此记录

本文的主要是说明Dev的报表的主从表,主从表的每一组显示在一页,当一组超出一页,第二页只显示第一组的。

一、每上报表设置图

简单设计图如上

二、后台代码

报表页代码

public partial class XtraReport1 : DevExpress.XtraReports.UI.XtraReport
    {
        public XtraReport1()
        {
            InitializeComponent();
        }


        /// <summary>
        /// 设置主从表的数据源
        /// </summary>
        /// <param name="reportData"></param>
        public void SetReportDataSource(DataSet reportData)
        {
            //因涉及到修改DataSet的内部属性,建议创建副本进行操作。
            DataSet ds = reportData.Copy();//创建副本

            //重要!!!给组(GroupHeader)绑定主键字段
            //本报表是按业务单号分组
            GroupField gf = new GroupField("ID", XRColumnSortOrder.Ascending);
            GroupHeader1.GroupFields.Add(gf);

            //给数据集建立主外键关系
            DataColumn parentColumn = ds.Tables["t1"].Columns["ID"];
            DataColumn childColumn = ds.Tables["t2"].Columns["ID"];
            DataRelation R1 = new DataRelation("R1", parentColumn, childColumn);
            ds.Relations.Add(R1);

            //绑定主表的数据源
            this.DataMember = "t1";
            this.DataSource = ds;
            this.xrLabel2.DataBindings.Add("Text", ds, "t1.ID");  

            //绑定明细表的数据源
            this.DetailReport.DataMember = "R1";
            this.DetailReport.DataSource = ds;


            this.xrLabel5.DataBindings.Add("Text", ds, "R1.ID");
            this.xrLabel6.DataBindings.Add("Text", ds, "R1.Name");

            xrLabel3.DataBindings.Add("Text", ds, "R1.ID");//绑定小计(当前单据的总金额)
            xrLabel4.DataBindings.Add("Text", ds, "R1.ID");//绑定小计(当前单据的总金额)
        }
    }

前台调用代码

private void simpleButton1_Click(object sender, EventArgs e)
        {
            XtraReport1 xtra = new XtraReport1();
            DataSet ds = new DataSet();
            DataTable dt1 = new DataTable("t1");
            dt1.Columns.Add("ID",Type.GetType("System.String"));

            DataTable dt2 = new DataTable("t2");
            dt2.Columns.Add("ID",Type.GetType("System.String"));
            dt2.Columns.Add("Name",Type.GetType("System.String"));

            for (int i = 0; i < 3; i++)
            {
                DataRow dt1Dr = dt1.NewRow();
                dt1Dr["ID"] = i.ToString();
                dt1.Rows.Add(dt1Dr);
                for (int j = 0; j < 39; j++)
                {
                    DataRow dt2Dr = dt2.NewRow();
                    dt2Dr["ID"] = i.ToString();
                    dt2Dr["Name"] = j.ToString() + "测试";
                    dt2.Rows.Add(dt2Dr);
                }
            }
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);

            xtra.SetReportDataSource(ds);
            xtra.ShowPreviewDialog();
        }

主从表代码如上

设计重点

1、加分页头

2、构建主从表数据

3、设置DetailReport PageBreak为AfterBand

此例可以应用于,单据的打印,多单据连打,根据自己需要发挥!

示例代码下载

原文地址:https://www.cnblogs.com/stalwart/p/3820091.html