WPF DataGrid导出到Excel
2015-07-11 11:00
405 查看
最近在搞一个快递系统的开发,用WPF做的,每个查询模块都牵扯到导出数据,于是想搞一个通用的导出,不想再通过获取数据源进行DataTable重写,这样每个都要写太麻烦,我前台DataGrid是用DataTempleteColumns绑定的,代码如下
问题来了,如果前台设置了DataGrid的高度,超出的内容在导出的时候就会为空 导出的时候只显示滚动条内可见的这些列
后来查了msdn才发现
WPF DataGrid中的虚拟化是默认开启的,这样Item数量多的情况下,视图可见范围内的Item才真正加载,我们可以通过使用
VirtualizingPanel.IsVirtualizing 属性关闭虚拟化:
解决方法:
<StackPanel Grid.Row="1">
<DataGrid IsReadOnly="True" DockPanel.Dock="Top" VirtualizingStackPanel.IsVirtualizing="False" >
<StackPanel>
希望能帮到你们
public static void Export(DataGrid dataGrid,string _fileName) { DataTable dt = new DataTable(); for (int i = 0; i < dataGrid.Columns.Count; i++) { if (dataGrid.Columns[i].Visibility ==System.Windows.Visibility.Visible)//只导出可见列 { dt.Columns.Add(dataGrid.Columns[i].Header.ToString());//构建表头 } } for (int i = 0; i < dataGrid.Items.Count; i++) { int columnsIndex = 0; DataRow row = dt.NewRow(); for (int j = 0; j < dataGrid.Columns.Count; j++) { if (dataGrid.Columns[j].Visibility == System.Windows.Visibility.Visible) { if (dataGrid.Items[i] != null && (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock) != null)//填充可见列数据 { row[columnsIndex] = (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock).Text.ToString(); } else { row[columnsIndex] = ""; } columnsIndex++; } } dt.Rows.Add(row); } System.Windows.Forms.SaveFileDialog save = new System.Windows.Forms.SaveFileDialog(); //save.Filter = "Excel文件(*.xls)|"; save.Title = "请选择要保存的路径"; save.FileName = _fileName; if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string fileName = save.FileName; ExportFiles.ExportExcel(fileName, dt); } }
问题来了,如果前台设置了DataGrid的高度,超出的内容在导出的时候就会为空 导出的时候只显示滚动条内可见的这些列
后来查了msdn才发现
WPF DataGrid中的虚拟化是默认开启的,这样Item数量多的情况下,视图可见范围内的Item才真正加载,我们可以通过使用
VirtualizingPanel.IsVirtualizing 属性关闭虚拟化:
解决方法:
<StackPanel Grid.Row="1">
<DataGrid IsReadOnly="True" DockPanel.Dock="Top" VirtualizingStackPanel.IsVirtualizing="False" >
<StackPanel>
希望能帮到你们
相关文章推荐
- htm5
- linux内核代码风格
- 文件2
- 苹果开建香港第四家零售店 或为亚洲最大
- Docker-1.相关知识+安装+镜像相关操作
- HBase启动过后几个小时后挂掉
- 0711 利用周六的时间好好充电
- java数值交换的技巧
- 第一种并查集
- Window7 家庭版 IIS 配置
- MIPS嵌入式linux 分析
- 黑马程序员——Java 多线程
- MotionEvent事件传递个人总结
- ORA-01113,ORA-01110的简单解决
- txt 开关 csv 可通用 工具
- 解决Nginx下WordPress后台404的问题
- Yii 不完全解决方案(一)
- C语言文件的输入输出_学生的信息
- 【leetcode】Longest Valid Parentheses
- 《小时代》系列收官:别笑人奇葩,看这部现象级电影产品留下哪些