zoukankan      html  css  js  c++  java
  • 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

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

    示例代码下载

  • 相关阅读:
    如何设计API返回码(错误码)?
    处理git项目内部结构一个变多个子包后提交失败问题
    mysql触发器例子
    使用kafka客戶端例子(开启kerberos验证)
    Shell脚本应用(for、while循环语句和case分支语句)
    Linux防火墙基础与编写防火墙规则
    Squid代理服务器
    rsync远程同步的基本配置与使用
    Shell脚本应用(if语句的结构)
    Shell的基础介绍和案例
  • 原文地址:https://www.cnblogs.com/stalwart/p/3820091.html
Copyright © 2011-2022 走看看