Dev Express WPF 给控件提供了公共的导出方法:
- Export to PDF
- Export to HTML
- Export to MHT
- Export to Text
- Export to CSV
- Export to XLS
- Export to XLSX
- Export to RTF
- Export to DOCX
- Export to Image
以导出数据到Excel表格为例:
导出模式分为两种类型: Data-Aware Export 和 WYSIWYG Export
其中 WYSIWYG Export 模式支持导出结果保持GridControl设置的 PrintStyle,但在Excel中显示有写问题,同时性能也稍差一些,可能这是Dev 升级导出引擎的部分原因吧。
Data-Aware Export 模型导出数据则不支持PrintStyle,如果需要设置表格数据的展示样式,可以实现 CustomizeCell 事件;
测试代码:
<Window x:Class="GridExample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:local="clr-namespace:GridExample" Width="600" Height="350" > <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/GridExample;component/Themes/PrintCellStylesWPF.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <Grid VerticalAlignment="Top"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <dxg:GridControl Name="grid" AutoGenerateColumns="AddNew"> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="PlainText"/> <dxg:GridColumn FieldName="MemoText" PrintCellStyle="{StaticResource MemoColumnPrintingStyle}" > <dxg:GridColumn.EditSettings> <dxe:MemoEditSettings/> </dxg:GridColumn.EditSettings> </dxg:GridColumn> <dxg:GridColumn FieldName="BooleanMember" PrintCellStyle="{StaticResource CheckEditColumnPrintingStyle}" > <dxg:GridColumn.EditSettings> <dxe:CheckEditSettings/> </dxg:GridColumn.EditSettings> </dxg:GridColumn> <dxg:GridColumn FieldName="Image" PrintCellStyle="{StaticResource ImageColumnPrintingStyle}" > <dxg:GridColumn.EditSettings> <dxe:PopupImageEditSettings/> </dxg:GridColumn.EditSettings> </dxg:GridColumn> </dxg:GridControl.Columns> <dxg:GridControl.View> <dxg:TableView Name="view" PrintColumnHeaderStyle="{StaticResource HeaderStyle}"/> </dxg:GridControl.View> </dxg:GridControl> <Button Grid.Row="1" Width="150" Name="PrintButton" Click="PrintButton_Click" Content="Show print preview"/> </Grid> </Window>
// Developer Express Code Central Example: // How to use the PrintCellStyle property to customize cell's printing appearance // // This example shows how to create custom PrintCellStyle for grid columns to bring // a custom printing appearance for PopupImageEdit, CheckBoxEdit and MemoEdit. // // You can find sample updates and versions for different programming languages here: // http://www.devexpress.com/example=E3227 using System; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Collections.Generic; using System.Windows.Resources; using System.IO; using System.Drawing; using System.Windows.Data; using DevExpress.XtraPrinting; using DevExpress.Export; namespace GridExample { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { grid.ItemsSource = new List<TestData>() { new TestData() { PlainText = "LMA AG", MemoText = "Mercedes-Benz SLK 2004 Silver", BooleanMember = true, Image = GetImage("/Images/1.png") }, new TestData() { PlainText = "Western Motors", MemoText ="Rolls-Royce Corniche 1975 Snowy whight", BooleanMember = false, Image = GetImage("/Images/2.png") }, new TestData() { PlainText = "Sun car rent", MemoText = "Ford Ranger FX-4 1999 Red rock", BooleanMember = true, Image = GetImage("/Images/3.png") } }; } ImageSource GetImage(string path) { return new BitmapImage(new Uri(path, UriKind.Relative)); } private void PrintButton_Click(object sender, RoutedEventArgs e) { //view.ExportToCsv(@"C:UserslenovoDesktop estExportaa.csv"); view.ExportToXlsx(@"C:UserslenovoDesktop estExportaa.xlsx", new XlsxExportOptionsEx { ExportType = ExportType.WYSIWYG }); XlsxExportOptionsEx options = new XlsxExportOptionsEx(); options.CustomizeCell += Options_CustomizeCell; view.ExportToXlsx(@"C:UserslenovoDesktop estExportaa11.xlsx", options); view.ShowPrintPreview(this); } private void Options_CustomizeCell(CustomizeCellEventArgs e) { if(e.AreaType == SheetAreaType.Header) { e.Formatting.Font = new DevExpress.Export.XlCellFont { Name= "微软雅黑", Bold = true, Size = 20 }; e.Formatting.BackColor = System.Drawing.Color.Pink; e.Handled = true; } } } }
PrintStyle 设置
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dxp="http://schemas.devexpress.com/winfx/2008/xaml/printing" xmlns:dxgt="clr-namespace:DevExpress.Xpf.Grid.Themes;assembly=DevExpress.Xpf.Grid.v20.1" > <Style x:Key="HeaderStyle" TargetType="{x:Type dxe:TextEdit}" BasedOn="{StaticResource {dxgt:TableViewThemeKey ResourceKey=DefaultPrintCellStyle}}"> <Setter Property="dxp:ExportSettings.TargetType" Value="Text" /> <Setter Property="FontSize" Value="11pt" /> <Setter Property="FontFamily" Value="Calibri" /> <Setter Property="Background" Value="#177477" /> <Setter Property="Foreground" Value="White" /> <Setter Property="FontWeight" Value="Bold" /> </Style> <Style x:Key="ImageColumnPrintingStyle" TargetType="{x:Type dxe:PopupImageEdit}" BasedOn="{StaticResource {dxgt:TableViewThemeKey ResourceKey=DefaultPrintCellStyle}}"> <Setter Property="dxp:ExportSettings.TargetType" Value="Panel" /> <Setter Property="DisplayTemplate"> <Setter.Value> <ControlTemplate TargetType="dxe:PopupImageEdit"> <dxe:ImageEdit Source="{Binding Path=Value}" IsPrintingMode="True" Margin="4" HorizontalAlignment="Center" VerticalAlignment="Center" /> </ControlTemplate> </Setter.Value> </Setter> </Style> <dx:BoolToObjectConverter x:Key="BoolToTextConverter" TrueValue="Avaliable" FalseValue="NotAvaliable" /> <Style x:Key="CheckEditColumnPrintingStyle" TargetType="dxe:CheckEdit" BasedOn="{StaticResource {dxgt:TableViewThemeKey ResourceKey=DefaultPrintCellStyle}}"> <Style.Setters> <Setter Property="dxp:ExportSettings.TargetType" Value="Panel" /> <Setter Property="DisplayTemplate"> <Setter.Value> <ControlTemplate TargetType="dxe:CheckEdit"> <dxe:TextEdit Text="{Binding Path=Value, Converter={StaticResource BoolToTextConverter}}" HorizontalAlignment="Center" Margin="4" /> </ControlTemplate> </Setter.Value> </Setter> </Style.Setters> </Style> <Style x:Key="MemoColumnPrintingStyle" TargetType="dxe:MemoEdit" BasedOn="{StaticResource {dxgt:TableViewThemeKey ResourceKey=DefaultPrintCellStyle}}"> <Style.Setters> <Setter Property="dxp:ExportSettings.TargetType" Value="Panel" /> <Setter Property="DisplayTemplate"> <Setter.Value> <ControlTemplate TargetType="dxe:MemoEdit"> <dxe:TextEdit Text="{Binding Value}" TextWrapping="Wrap" IsPrintingMode="True" Margin="4" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" /> </ControlTemplate> </Setter.Value> </Setter> </Style.Setters> </Style> </ResourceDictionary>
public class TestData { public string PlainText { get; set; } public string MemoText { get; set; } public bool BooleanMember { get; set; } public ImageSource Image { get; set; } }