关于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=余下高度/(行高)。

 

 简单数据分页打印

 如有不足地方,请指出

 

posted on 2010-12-06 13:16  zzcc6  阅读(1211)  评论(2编辑  收藏  举报

导航