首页 > 代码库 > DevExpress主从表 按组分页一组不足一页为一页--以此记录

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

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

示例代码下载