閱讀600 返回首頁    go 微軟 go Office


silverlight分頁打印報表

在打印報表的時候經常會用到分頁,本文的報表是連續的多個報表按順序排列的,其中每個報表由三部分組成,第一部分是一個label,用於顯示報表標題,第二部分是一個label,用於顯示報表單位,第三部分是一個datagrid,用於顯示數據,

報表截圖如下圖所示:




現在想實現的功能是每個報表占一頁,一次性打印所有的報表。

實現此分頁打印的代碼如下:

PrintDocument _print = new PrintDocument();
            List<UIElement> uis = new List<UIElement>();
                      
            _print.PrintPage += (s, args) =>
            {
                StackPanel sp = new StackPanel();

                while ( SP_ReportManagement.Children.Count > 0)
                {
                    var ui = SP_ReportManagement.Children[0];
                    SP_ReportManagement.Children.RemoveAt(0);
                    
                    sp.Children.Add(ui);
                    uis.Add(ui);
                    sp.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
                                        
                    //當sp中已經包含一個報表或者包含的報表高度大於紙張高度就換頁
                    if (sp.Children.Count > 3 || (sp.DesiredSize.Height > args.PrintableArea.Height && sp.Children.Count > 1))
                    {                        
                        sp.Children.Remove(ui);
                        uis.Remove(ui);
                        SP_ReportManagement.Children.Insert(0, ui);
                       
                        args.HasMorePages = true;
                        
                        break;
                    }                  
                }
                args.PageVisual = sp;
            };

            //把刪除的報表數據重新加入到SP_ReportManagement
            _print.EndPrint += (s, args) =>
            {
                if (SP_ReportManagement.Children.Count > 0)
                {
                    for (int i = uis.Count() - 1; i >= 0; i--)
                    {
                        //把標題和單位加入
                        if (i % 3 == 0 || i % 3 == 1)
                        {
                            Label ui = (Label)uis.ElementAt(i);
                            ((StackPanel)ui.Parent).Children.Remove(ui);

                            SP_ReportManagement.Children.Insert(0,ui);
                        }
                        //加入dagagrid表格數據
                        else
                        {
                            DataGrid ui = (DataGrid)uis.ElementAt(i);
                            ((StackPanel)ui.Parent).Children.Remove(ui);

                            SP_ReportManagement.Children.Insert(0,ui);
                        }
                    }
                }
                else
                {
                    for (int i = 0;i < uis.Count;i++)
                    {
                        //把標題和單位加入
                        if (i%3==0 || i %3 ==1)
                        {
                            Label ui = (Label)uis.ElementAt(i);
                            ((StackPanel)ui.Parent).Children.Remove(ui);

                            SP_ReportManagement.Children.Add(ui);
                        }
                        //加入dagagrid表格數據
                        else
                        {
                            DataGrid ui = (DataGrid)uis.ElementAt(i);
                            ((StackPanel)ui.Parent).Children.Remove(ui);

                            SP_ReportManagement.Children.Add(ui);
                        }
                        
                    }
                }
               
                uis.Clear();
                
            };


            _print.Print("Report Generating ......");



最後更新:2017-04-03 16:59:46

  上一篇:go Html中的favicon.ico
  下一篇:go 20個優秀的前端框架