Devexpress 的打印功能相当强大,在Silverlight下也非常不错。
在Silverlight下实现GridControl的打印和导出,首先需要在服务端添加dev的ExportService.svc服务,导出时需要用到这个服务。在实现打印和导出的功能时,需要用到一个很重要的类PrintableControlLink,靠PrintableControlLink与GridControl之间建立一个Link来实现打印功能。而导出功能需要向PrintableControlLink对象指定ExportService的路径,使得GridControl和ExportService关联起来实现导出功能。
//打印
private void btnPrint_Click(object sender, RoutedEventArgs e)
{
try
{
PrintableControlLink link = new PrintableControlLink(this.dcInfo.View as DevExpress.Xpf.Printing.IPrintableControl);
link.Print();
link.PrintCompleted += (o, a) =>
{
MessageBox.Show("打印成功!");
};
}
catch { }
}
//导出excel
private void btnExport_Click(object sender, RoutedEventArgs e)
{
try
{
SaveFileDialog xlsDialog = new SaveFileDialog();
xlsDialog.Filter = "XLS文件| *.XLS";
xlsDialog.DefaultExt = "XLS";
bool? result = xlsDialog.ShowDialog();
if (result == true)
{
System.IO.Stream fileStream = xlsDialog.OpenFile();
PrintableControlLink link = new PrintableControlLink(this.dcInfo.View as DevExpress.Xpf.Printing.IPrintableControl);
link.ExportServiceUri = "../ExportService.svc";
link.ExportToXls(fileStream, new DevExpress.XtraPrinting.XlsExportOptions(), true);
link.ExportCompleted += (o, a) =>
{
MessageBox.Show("导出成功!");
};
}
}
catch { }
}
//打印预览
private void _PrintPreview(object sender, RoutedEventArgs e)
{
try
{
PrintWin win = new PrintWin();
var preview = new DocumentPreview();
PrintableControlLink link = new PrintableControlLink(this.dcInfo.View as DevExpress.Xpf.Printing.IPrintableControl);
link.ExportServiceUri = "../ExportService.svc";
LinkPreviewModel model = new LinkPreviewModel(link);
var barManagerCustomizer = new TemplatedBarManagerController() { Template = (DataTemplate)Resources["toolbarCustomization"] };
preview.BarManager.Controllers.Add(barManagerCustomizer);
preview.Model = model;
link.CreateDocument(true);
win.Title = "列表打印预览";
win.Content = preview;
win.Show();
}
catch { }
}