【问题标题】:Databinding a WPF grid control to a CSV file将 WPF 网格控件数据绑定到 CSV 文件
【发布时间】:2011-11-16 08:37:21
【问题描述】:

这样的事情可能吗?

我目前正在尝试将 CSV 文件直接读入 WPF DataGrid。该文件没有已知的格式 - 也就是说,我不知道该字段是什么,或者有多少。我只想以网格格式显示整个文件(类似于打开 CSV 文件时 excel 所做的)。

【问题讨论】:

  • 你会一直有一个标题行吗?
  • 如果提供解决方案我可以拥有
  • 这是更多的 csv 读/写问题。一旦你有了解析功能,实现分页等就会容易得多。

标签: wpf xaml .net-4.0 csv .net-4.5


【解决方案1】:

我并不立即熟悉 DataGrid 的 WPF 变体,但熟悉一般的 .NET DataGrid 和 DataGridView 控件。假设此控件以类似的方式运行,您只需要打开 csv 文件,逐行读取并在制表符或逗号上拆分,然后将数据放入 DataTable 中。从那里,您可以将 DataGrid 控件的 DataSource 设置为 DataTable(或创建一个 DataView,如果您需要一些自定义格式/查看),并调用 Refresh() 方法。

【讨论】:

    【解决方案2】:

    DataGrid 基于ItemsControl 控件,项目由ItemsControl.ItemsSource 表示,其类型为IEnumerable。因此,如果您只是想在 DataGrid 中显示 CSV,您应该在任何实现 IEnumerable 的数据结构中读取 CSV,并通过 XAML 中以更优选方式绑定的代码将其设置为 DataGrid.ItemsSource 属性。因此,您的网格将有一个代表整个 CSV 文件行的列。如果您想在单独的列中显示每个值 - IEnumerable 数据结构的每个项目(我建议 IList<>)也应该代表 IEnumerable,基本上是 IList<IEnumerable<object>>。

    要在本地数据结构中读取 CSV,我建议使用一些免费的 CSV 解析库,而不是自己这样做,因为解析 CSV 有时会很棘手。以KBCsv library为例看一下。

    我相信这是您尝试做的非常接近的示例: Binding a ListView to a Data Matrix (ListView 也是 ItemsControl,所以解决方案是一样的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2011-01-31
      • 2017-05-14
      • 2012-09-26
      • 2011-10-26
      相关资源
      最近更新 更多