zoukankan      html  css  js  c++  java
  • 关于SilverLight打印(二)

    关于SL打印(二)

    在本页面中有DataGrid数据绑定,可以根据数据加载实现分页打印

    代码
    List<EmployeeModel>() employees = new List<EmployeeModel>();

     
    //调用打印

    GetPrintPage(dataPager1.PageCount, dataPager1.PageSize)
    //当前数据分页中dataPager1
    //当前数据页行数PageSize

    //employees 当前填充DataGrid的集合
    //PageCount总页码
    //Pagesize 每一页页数
    public void GetPrintPage(int PageCount, int Pagesize)
            {
                PrintDocument pd 
    = new PrintDocument();
                
    int itemindex = 0;//从第一张打印
                int count = Pagesize;

                
    //根据页码选择的数据
                pd.PrintPage += (s, pe) =>
                {
                    StackPanel stack 
    = new StackPanel();
                    
    while (itemindex < PageCount)
                    {
                        
    if (itemindex == PageCount- 1)
                        {
                            count 
    = employees.Count - (Pagesize * itemindex);
                        }
                        List
    <EmployeeModel> itemsource = LoadNewList(employees, itemindex * Pagesize, count);

                        PageP mode 
    = new PageP();//当前要打印的页面(包含数据DataGrid)
                        int PrintPageindex = itemindex + 1;
                        mode.MinHeight 
    = 1058;//根据A4纸显示高度
                        mode.dataGrid1.ItemsSource = itemsource;
                        stack.Children.Add(mode);

                        stack.Measure(
    new Size(pe.PrintableArea.Width, double.PositiveInfinity));

                        
    if (stack.DesiredSize.Height > pe.PrintableArea.Height | stack.Children.Count > 1)
                        {
                            stack.Children.Remove(mode);
                            stack.Measure(pe.PrintableArea);
                            pe.HasMorePages 
    = true;
                            
    break;
                        }
                        itemindex 
    += 1;
                    }
                    
                    pe.PageVisual 
    = stack;
                };
                pd.Print(
    null);
            }


    // 获取指定的List集合
      public static List<T> LoadNewList<T>(List<T> _source, int PIndex, int Pcounts)
            {
                List
    <T> newList = new List<T>();

                newList.AddRange(_source.GetRange(PIndex, Pcounts));
                
    return newList;
            }



     附:一般打印都是A4纸;A4纸的标准是宽21cm;高29.7cm.像素为:宽588px;高:862Px;

      一般除开边距margin(70,80,70,80) 余下部分就是可以是datagrid的高度,Pagesize=余下高度/(行高)。

     简单数据分页打印

     如有不足地方,请指出

  • 相关阅读:
    关于callback
    vue项目前端限制页面长时间未操作超时退出到登录页
    vue 项目文件流数据格式转blob图片预览展示
    You are using the runtime-only build of Vue where the template compiler is not available.
    element-ui el-cascader级联选择器设置指定层级不能选中
    vue项目中图片预览旋转功能
    nhandled rejection Error: EPERM: operation not permitted, open 'C:Program Files odejs ode_cache npm ERR! cb() never called!
    vue+element-ui upload图片上传前大小超过4m,自动压缩到指定大小,长宽
    vue+element-ui 项目中实现复制文字链接功能
    vue项目js实现图片放大镜功能
  • 原文地址:https://www.cnblogs.com/sfwl_1026/p/1896520.html
Copyright © 2011-2022 走看看