示例模版:
说明:pageheader跟pageFooter每页都会显示数据
barcode二维码设置
数据绑定
public XtraReport1(DataSet dsSheet, DataSet dsDetail)
{
InitializeComponent();
this.PrintingSystem.ShowMarginsWarning = false;
this.dsDetail = dsDetail;
this.dsSheet = dsSheet;
DataSet dsRep = new DataSet();
DataTable dtSheet = dsSheet.Tables[0].Copy();
dtSheet.TableName = "parent";
dsRep.Tables.Add(dtSheet);
DataTable dtDetail = dsDetail.Tables[0].Copy();
dtDetail.TableName = "child";
dsRep.Tables.Add(dtDetail);
//设置主表和从表的父子关系
DataColumn parentColumn = dsRep.Tables["parent"].Columns["ID"];
DataColumn childColumn = dsRep.Tables["child"].Columns["ID"];
DataRelation R1 = new DataRelation("R1", parentColumn, childColumn);
dsRep.Relations.Add(R1);
//绑定主表的数据源
this.DataMember = "parent";
this.DataSource = dsRep;
//绑定明细表的数据源
this.DetailReport.DataMember = "R1";
this.DetailReport.DataSource = dsRep;
//this.DetailReport.dat
// this.DataSource = dsRep ;
BindHeadData(dsRep);
BindBodyData(dsRep);
//在页脚之后设置分页符
GroupFooter1.PageBreak = PageBreak.AfterBand;
}
private void BindHeadData(DataSet ds)
{
//为XRLable绑定数据集及对应的字段
// this.barCodeControl1.DataBindings.Add("Text", ds, "单据行条码"); 不知道为何条码不能用这种方式绑定
barCodeControl1.Text = ds.Tables[0].Rows[0]["单据行条码"] + ""; //条码绑定方式 存在问题
this.xr生产单号.DataBindings.Add("Text", ds, "生产单号");//单元格 标签绑定方式
this.xrPictureBox1.DataBindings.Add("Image", ds, "图纸");//图片绑定方式
}
private void BindBodyData(DataSet ds)
{
this.d子件编码.DataBindings.Add("Text", ds, "R1.子件编码");
}
private void xrpage_PrintOnPage(object sender, PrintOnPageEventArgs e)
{
//添加标签控件 在标签控件事件PrintOnPage里面增加下面的方法 可以获得页码
xrpage.Text = (e.PageIndex + 1).ToString() + "/" + e.PageCount.ToString();//当前页码/总页数
}
以上打印模版设计完成
打印方法(单个)
XtraReport1 report2 = new XtraReport1(ds, ds1);
report2.Print(); //直接打印
report2.ShowPreview();//打印预览
打印方法(批量) 2种方法
1.循环
XtraReport1 report1 = null;
for{
if (report1 == null)
{
report1 = new XtraReport1(ds, ds1);
report1.CreateDocument();
}
else
{
XtraReport1 report2 = new XtraReport1(ds, ds1);
report2.CreateDocument();
report1.Pages.AddRange(report2.Pages);
}
}
report1.PrintingSystem.ContinuousPageNumbering = true;
ReportPrintTool printTool = new ReportPrintTool(report1);
printTool.ShowPreviewDialog();
2.略