zoukankan      html  css  js  c++  java
  • 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();
     
  • 相关阅读:
    转--Android中自定义字体的实现方法
    android中Intent传值与Bundle传值的区别详解
    通过Application传递数据代码
    LayoutInflater的使用
    转--Android资源总结(环境搭建/ 反编译工具)
    转--android Toast大全(五种情形)建立属于你自己的Toast
    转--9中对话框
    转--全局异常处理
    安卓记住密码
    转--Android学习笔记-实用代码合集
  • 原文地址:https://www.cnblogs.com/houzf/p/10041219.html
Copyright © 2011-2022 走看看