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();

 

 
posted @ 2018-11-29 22:00  吃葡萄不吐葡萄脾  阅读(1248)  评论(0编辑  收藏  举报