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 ......");



相关文章
|
BI C++ 数据可视化
在Silverlight中动态绑定页面报表(PageReport)的数据源
ActiveReports 7中引入了一种新的报表模型——PageReport(页面布局报表),这种报表模型又细分了两种具体显示形式: o    固定页面布局报表模型(FPL)是ActiveReports 7中首创的一种 .NET报表模型,通过这种模型可以非常方便地设计出拥有复杂格式的报表模板。
1041 0
|
SQL 算法 大数据
Silverlight查询大数据出错?使用服务器端分页控件DomainDataSource
原文http://www.cnblogs.com/slmk/archive/2012/08/21/2649369.html   DomainDataSource控件是很强大的,排序/分组/分页等都能轻松搞定。
955 0
|
开发工具 .NET 开发框架
Silverlight中DataGrid控件动态生成列并结合DataPager进行分页
1、准备一个实体类 using System; using System.Collections.
805 0
|
BI
DevExpress.XtraReports:Silverlight中报表预览工具栏
//取消鼠标右键菜单提示,此菜单功能控制是否显示工具栏。 documentPreview1.BarManager.Bars[0].AllowHide=DevExpress.Utils.DefaultBoolean.
885 0
|
SQL 存储 JSON
silverlight + wcf(json格式) + sqlserver存储过程分页
silverlight并没有提供现成的分页控件,百度了一圈,也没有发现aspx中好用的类似AspNetPager成熟控件,网上现有的一些分页代码,很多也是基于1.0版本的,silverlight2.0的并不多,自个儿琢磨了一下,发现自己弄一个也并非难事,思路和主要代码分享如下: 1.
948 0

热门文章

最新文章