【问题标题】:How to display real tabular data with WPF? [duplicate]如何使用 WPF 显示真实的表格数据? [复制]
【发布时间】:2010-08-25 14:12:55
【问题描述】:

我有以下问题: 我必须在某种网格中显示表格数据。

说 A 类是一个数据项,具有属性 Foo 和 Bar,我有一个项目列表 List 或类似的东西。我想在网格中显示这些项目,其中具有相同 Foo 的项目在一列中,而具有相同 Bar 的项目在一列中。基本的。简单的。我想?

我最初的尝试是创建一个 ItemsControl,使用 Grid 作为 ItemsPanelTemplate,以及一个 ItemsTemplate,我将 Grid.Row 和 Grid.Column 附加属性绑定到 A.Foo 和 A.Bar,使用 IValueConverters 关联特定的 Foo具有特定的列,例如转换器将在一种 Columns 数组中查找 Foo 值并返回正确的索引。 问题是,为 Grid 构建行和列定义。由于它们是完全动态的(在设计时我不知道 Foo 和 Bar 将在源集合中),我无法在 xaml 文件中定义它们。但在运行时,ItemsControl 确实不提供对当前 ItemsPanel 实例的访问。 我发现的唯一方法是使用 VisualTreeHelper.GetChild 的肮脏方式,我设法获取 ItemsPanel 实例并创建所需的行和列定义,但我的 ItemTemplate-d 项目不会在正确的行和列中呈现,尽管我的转换器返回了正确的列/行索引。也许我真的不明白 ItemsControl 在内部是如何工作的,但问题是,我没有想法。

有人建议将 ListView 与 GridView 一起使用,将相同 Bar 的项目分组到另一个对象中,这将减轻我动态创建行的负担,但动态创建列似乎相当复杂。

有人有想法或至少有提示吗?我错过了什么明显的东西吗?

【问题讨论】:

  • 好的,我刚刚发现,ItemsControl 在我的 ItemTemplate 和我的 ItemsPanelTemplate 之间使用了 ContentPresenter...所以我的 ItemTemplate 中附加的 Grid.Row 和 Grid.Column 属性不能工作?我该如何解决这个问题?
  • Foo 和 Bar 有多少个值?您能否使用枚举中的值将属性转换为行/列数?

标签: c# wpf gridview


【解决方案1】:

因为您提到了切换到 ListView 的可能性,所以我认为我会推荐使用 DataGrid,因为一旦您将数据加载到 DataTable 中,DataGrid 就会为您完成所有工作以生成列和行。

这是我复制的一些工作代码,让您开始使用。

这是 DataGrid 的绑定:

<WpfToolkit:DataGrid
            IsReadOnly="True"
            IsTabStop="False"
            ItemsSource="{Binding Path=GridData, Mode=OneWay}">
</WpfToolkit:DataGrid>

为类中的 XAML 绑定定义一个属性(我使用 MVVM 模式):

private DataTable _dt = new DataTable("MyDataTable");
public DataView GridData
{
   get
   {
      return _dt.DefaultView;
   }
}

将 DataColumns 添加到您的 DataTable 中,如下所示:

DataColumn fileType = new DataColumn("FileType");
fileType.AllowDBNull = true;
fileType.DataType = typeof(string);
_dt.Columns.Add(fileType);

将 DataRows 添加到您的 DataTable 中,如下所示:

DataRow dr = _dt.NewRow();
dr["FileType"] = "*.txt";
_dt.Rows.Add(dr);

如下重置行和列:

_dt.Rows.Clear();
_dt.Columns.Clear();

我只需要使用这些部分来动态生成 DataGrid。

【讨论】:

  • 请注意,DataGrid 是 .Net 3.5 的 WpfToolkit 的一部分,但已迁移了 4.0 版的基本 .Net 框架。
猜你喜欢
  • 2011-03-24
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多