将WPF DataGrid导出为外观漂亮的文本文件。文本文件必须易于阅读

时间:2010-06-15 23:54:05

标签: wpf export-to-excel export-to-text

是否有一种将WPF DataGrid导出到文本文件和.csv文件的简单方法?我做了一些搜索,但是看不到有一个简单的DataGrid方法。通过使用DataGrid的ItemsSource,我得到了一些工作(几乎没有)。在我的例子中,这是一个结构数组。我使用StreamWriters和StringBuilders做了一些事情(详情可用),基本上有:

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类本身内)。

感谢。

2 个答案:

答案 0 :(得分:1)

我认为目标是尽可能以所见即所得。在那种情况下,我会:

  1. 遍历所有DataGridRows,并为每个DataGridRows构建一个包含每个DataGridCell中显示的数据的字符串[]。对于大多数DataGridColumn类型来说,这很容易。对于DataGridTemplateColumn,您需要使用Binding然后转换.ToString()。
  2. 我也会跟踪每列中的最大字符串长度。
  3. 下一步取决于导出类型:

    • 对于csv导出,我会将每个字符串[]中的所有字符串附加在引号内,并在它们之间用逗号分隔并写出来。
    • 对于纯文本导出,我会将每个用空格填充的字符串[]中的所有字符串追加到该列的最大字符串长度1+并将其写出来。

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

答案 1 :(得分:0)

我会使用网格的Application.Copy功能,选择all然后复制代码,然后你可以解析剪贴板帮助数据,这些数据是csv,html和其他一些格式。