WPF导出MasterDetail及所属子级详情至Excel
利用PrintHelper将WPF中的MasterDetail及所属子级详情导出至Excel。
TableView
WPF的DataGrid导出Excel到指定文件夹很简单,直接利用如下代码即可实现功能。
using System.Diagnostics;
using System.Windows;
using DevExpress.Mvvm;
using DevExpress.Mvvm.UI;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Grid;
SaveFileDialogService saveFileDialogService = new SaveFileDialogService()
{
DefaultExt = "xls",
Filter = "Excel 2007+|*.xls",
DefaultFileName = "You_Want_Excel_Name"
};
if (saveFileDialogService.ShowDialog())
{
var fileName = saveFileDialogService.GetFullFileName();
(MasterDetailDemo.View as TableView).ExportToXls(fileName);
if (DXMessageBox.Show("是否打开导出文件?", "系统提示",
MessageBoxButton.OKCancel, MessageBoxImage.Information)
== MessageBoxResult.OK)
Process.Start(fileName);
}
只需要将上面代码中的DefaultFileName替换成你想要的Excel文件名,其中MasterDetailDemo为TableView的Name属性值。
PrintHelper
上面代码已经实现了最常见的DataGrid导出到Excel,但有些时候我们需要将MasterDetail及所属子级详情导出至Excel,这时候可能就需要用到PrintHelper,这时候只需引用DevExpress.Xpf.Printing,然后需要为TableView添加PrintAllDetails属性,并将上述代码更改成如下:
using DevExpress.Xpf.Printing
if (saveFileDialogService.ShowDialog())
{
var fileName = saveFileDialogService.GetFullFileName();
var tableView = ((TableView)MaterielPurchaseGrid.View);
tableView.PrintAutoWidth = false;
PrintHelper.ExportToXlsx(tableView, fileName,
new XlsxExportOptions() {
ShowGridLines = true
});
if (DXMessageBox.Show("是否打开导出文件?", "系统提示",
MessageBoxButton.OKCancel, MessageBoxImage.Information) == MessageBoxResult.OK)
Process.Start(fileName);
}
其中的PrintAutoWidth控制最终输出至Excel中列的是否自适应,Demo中用到的TableView如下:
<dxg:TableView Name="MasterDetailDemo" PrintAllDetails="True"></dxg:GridControl.View>