0

有没有一种简单的方法可以将 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

我使用制表符分隔符并不奇怪,但我希望做得更好。在 DataGrid 中当然很容易阅读!我当然可以有一些逻辑来用空格填充短值,但这似乎很混乱。我想可能有更好的方法。我也有一种感觉,这是一个常见问题,并且可能以前已经解决过(希望在 .NET 类本身中)。

谢谢。

4

2 回答 2

1

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

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

下一步取决于导出类型:

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

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

于 2010-06-16T04:13:37.780 回答
0

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

于 2010-06-16T05:06:31.703 回答