如题,官方示例只适用将DataGrid的 DataGridTextColumn 列导出到Excel。但是DataGrid中假设包含了自定义模板列如
<c1:DataGridTemplateColumn Header="用户" Width="*">
<c1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<HyperlinkButton x:Name="hpbtn_ShowUserInfo" Click="hpbtn_ShowUserInfo_Click" Content="{Binding Name}" Margin="0" />
</StackPanel>
</DataTemplate>
</c1:DataGridTemplateColumn.CellTemplate>
</c1:DataGridTemplateColumn>
那么导出后,这列就为空白。
这个 需要些一个 方法,导出dataset 数据。要设置 导出的列。需要 自己写,只不过 用 c1中的类。
public static void GenerateExcelFile(System.Data.DataTable dataTable, string FileName) { C1.C1Excel.C1XLBook xlsBook = new C1.C1Excel.C1XLBook(); C1.C1Excel.XLSheet xlsSheet = xlsBook.Sheets[0]; C1.C1Excel.XLStyle xlsStyle = new C1.C1Excel.XLStyle(xlsBook); // Header foreach (System.Data.DataColumn col in dataTable.Columns) { xlsSheet[0, col.Ordinal].Value = col.Caption; xlsStyle.BackColor = System.Drawing.Color.LightGray; xlsSheet[0, col.Ordinal].Style = xlsStyle; } // Context int y = 1; foreach (System.Data.DataRow row in dataTable.Rows) { int x = 0; foreach (System.Data.DataColumn col in dataTable.Columns) { xlsSheet[y, x].Value = row[col]; x++; } y++; } AutoSizeExcelColumns(xlsSheet); xlsBook.Save(FileName); //System.Diagnostics.Process.Start(FileName); }
谢谢园友,思路就是园友你说的这种了,需要自己重新构造一个新的C1DataGrid,然后将数据源赋给这个新的C1DataGrid。最后再导出,就成功了。
感谢您对 ComponentOne 的关注,最新版本为 2012V2 ,已经支持“中文和资源汉化”,更多信息请参考-ComponentOne Ultimate 2012 v2 新特性:http://www.cnblogs.com/C1SupportTeam/archive/2012/09/05/2671828.html