DEV 模板打印记录,每页设置固定条数
使用XtraReport 打印数据记录时,如果打印的Table 记录太多或者cell 文字过多时,表格会自动拉伸。
当出现换页时混出现表格打断的情况,这时我们应该考虑设置每页打印固定条数以解决表格跨页的情况。
XtraReport.AfterPrint事件
XtraReport绘制Document完成后会触发AfterPrint事件
report.AfterPrint += Report_AfterPrint;
重写该事件
1 private void Report_AfterPrint(object sender, EventArgs e) 2 { 3 XtraReport PdfReport = sender as XtraReport; 4 if (PdfReport != null) 5 { 6 var reports = GetReport(result); 7 foreach (var item in reports) 8 { 9 for (int i = 0; i < item.Pages.Count; i++) 10 { 11 PdfReport.Pages.Add(item.Pages[i]); 12 } 13 } 14 } 15 }
GetReport方法根据数据源创建模板集合,我需要在pdf页面展示2条数据
/// <summary> /// 根据两组数据做一个分组得到一个报表组 /// </summary> /// <param name="tempResult"></param> /// <returns></returns> List<XtraReport> GetReport(List<ViewRouteMdl> viewMds) { if (viewMds == null || viewMds.Count == 0) { return new List<XtraReport>(); } List<XtraReport> result = new List<XtraReport>(); List<ViewRouteMdl> tempResult = null; int count = 0; foreach (var item in viewMds) { count++; if (count == 2) { count = 0; XtraReport tempReport = new XtraReport(); tempReport.LoadLayout(fs); tempResult.Add(item); tempReport.DataSource = Utils.ToDataTable(tempResult); tempReport.CreateDocument(); result.Add(tempReport); tempResult.Clear(); } else { if (tempResult == null) { tempResult = new List<ViewRouteMdl>(); } tempResult.Add(item); } } if (tempResult.Count != 0) { XtraReport tempReport = new XtraReport(); tempReport.LoadLayout(fs); tempReport.DataSource = Utils.ToDataTable(tempResult); tempReport.CreateDocument(); result.Add(tempReport); tempResult.Clear(); } return result; }
上面方法中使用的fs是加载模板流代码如下,当界面关闭时需要释放fs
FileStream fs = null; string reportFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ReportFiles", "scRouteView.repx"); fs = new FileStream(reportFile, FileMode.Open);
fs.Close();
fs.Dispose();