我们要实现的报表内容如下图所示:
报表可以显示报表标题,各个字段名;报表还可以自动分页,显示总页数和当前页数;报表的主体数据绑定图片和各个字段的数据并能自动计算各行数据的合计数;
虽说是一个简单的样式,但麻雀虽小,五脏俱全。都应该能满足大多数场合报表打印的要求。
在Silverlight 4中实现这样的报表打印,需要以下几个步骤:
定义后台处理控件->定义报表模版->获取数据->填充数据到模版->打印报表
一.我们用VisualStudio2010新建一个Silverlight4的项目,并添加一个Silverlight控件项目(System.Windows.Printing.Reporting)
我们需要这个控件来处理分页和打印的各类属性。
添加一个Report.cs类,代码如下:
添加一个获取数据集的属性PrintingEventArgs.cs
在主项目添加对刚建立的控件的引用,在MainPage.xaml里也添加控件的引用,代码如下:
<UserControl x:Class="SilverlightPrintExample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:reporting="clr-namespace:System.Windows.Printing.Reporting;assembly=Silverlight.Reporting"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
在MainPage.xaml的<Grid></Grid>标签内定义以下模版:
二.定义报表模版
我们把报表模版分成:表头模版(PageHeaderTemplate),主体数据模版(ItemTemplate),合计数模版(ReportFooterTemplate)和页脚模版(PageFooterTemplate),并使用以上的名称。
在这里我们只示范比较简单的模版XAML文件,大家可以根据自己的需要进行修改。
1.制作表头模版(PageHeaderTemplate):
2.制作主体数据模版(ItemTemplate):
3.制作各行数据的合计数模版(ReportFooterTemplate):
该模版一般位于主体数据的右下方
4.制作页脚模版(PageFooterTemplate):
该模版一般用来显示当前页数和总页数。
在MainPage.xaml里添加一个打印按钮
<Button Width="200" Height="100" Content="打印" Click="Print_Report"/>
三.获取打印数据
获取打印数据的方式有多种多样,比如:WCF,Webservice,.Net RIA Service等等。在这里我们简单的用一个ObservableCollection
来填充我们需要的数据。
1.定义一个数据模型DataTemplate.cs
2.定义数据接口GolfData.cs
3.定义一个各行数据合计数的模型Heji.cs
这样,我们就可以把以上自定义的数据填充到报表了。
四.填充数据到模版
在MainPage.cs里,编写如下代码:
最后把报表打印出来:
五.打印报表
private void Print_Report(object sender, RoutedEventArgs e)
{
Report.Print();//打印报表
}
以上内容只是一个Silverlight简单的报表打印的实现,还有很多功能需要完善,比如打印预览界面的实现。请大家完善它。
建议大家安装个PDF打印软件来调试程序,否则非常的费纸张 :)
全部源码下载:http://download.csdn.net/detail/soft2buy/8172801