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

一、每上报表设置图

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

简单设计图如上

二、后台代码

报表页代码

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 = ; i < ; i++)
{
DataRow dt1Dr = dt1.NewRow();
dt1Dr["ID"] = i.ToString();
dt1.Rows.Add(dt1Dr);
for (int j = ; j < ; 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

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

示例代码下载

04-26 09:47