2010-06-15 96 views
0

有没有简单的方法将WPF DataGrid导出为文本文件和.csv文件?我做了一些搜索,看不到有一个简单的DataGrid方法来做到这一点。通过使用DataGrid的ItemsSource,我得到了一些工作(几乎没有)。就我而言,这是一系列结构。我做StreamWriters和StringBuilders(可用详细信息)的东西,主要有:以漂亮的格式将WPF DataGrid导出为文本文件。文本文件必须易于阅读

StringBuilder destination = new StringBuilder(); 
destination.Append(row.CreationDate); 
destination.Append(seperator); // seperator is '\t' or ',' for csv file 
destination.Append(row.ProcId); 
destination.Append(seperator); 
destination.Append(row.PartNumber); 
destination.Append(seperator); 

我这样做对阵列中的每个结构(在一个循环中)。这工作正常。问题是阅读文本文件并不容易。数据在同一列内可以有不同的长度。我想看到的东西,如: 2007-03-03 234238423823 823829923 2007-03-03 66 99 和当然,我得到的是这样的: 2007-03-03 234238423823 823829923 2007-03-03 66 99

这并不是说我使用Tab键分隔符令人惊讶的捐赠,但我希望能够做的更好。在DataGrid中阅读当然很容易!我当然可以有一些逻辑用空格填充短值,但看起来很杂乱。我认为可能有更好的方法。我也有一种感觉,这是一个常见的问题,可能之前已经解决了(希望在.NET类中)。

谢谢。

回答

1

我认为我们的目标是要为WYSIWYG越好。在这种情况下,我会:

  1. 循环遍历所有DataGridRows,并为每个构建一个字符串[]包含显示在每个DataGridCell中的数据。对于大多数DataGridColumn类型这很容易。对于DataGridTemplateColumn,您需要使用绑定然后转换.ToString()。
  2. 我也会跟踪每一列的最大字符串长度,因为我这样做了。

下一步取决于出口类型:

  • 对于一个CSV文件导出,然后我会追加在每个字符串[]所有的字符串,引号里与他们之间的逗号,并把它们写出来。
  • 对于纯文本导出我会追加在每个字符串填充[]与空间1+该列的最大字符串长度,并把它们写出来的所有字符串。

使用实际的DataGridRow,DataGridCell和DataGridColumn对象的原因是要准确写出最终用户看到的内容。例如,你可以跳过隐藏的列中,结合运用字符串格式,荣誉过滤/分组/排序等

0

我会用网格的Application.Copy功能,全选,然后在代码复制,那么你就可以解析以csv,html和其他一些格式存在的剪贴板帮助程序数据。