在 WPF 中,如何将数据网格列绑定到数据表的特定列?

Posted

技术标签:

【中文标题】在 WPF 中,如何将数据网格列绑定到数据表的特定列?【英文标题】:In WPF, how can I bind a datagrid column to a specific column of a datatable? 【发布时间】:2011-04-07 11:27:28 【问题描述】:

我有一个包含许多列的数据表,以及一个只需要显示其中几个列的数据网格。我需要一个如何做的代码示例。我发现一大堆示例告诉我将 AutoGenerateColumns 设置为 true 并将表设置为 DataContext 以显示我的 DataTable 中的所有列。而且我想我可以输入一页代码来隐藏所有我不需要的列,将剩余的列重新排列为适当的顺序和大小,但肯定有更优雅的方式。

在设计器中,我已经构建了要显示的列集合,我得到了数据表,如何将现有的数据网格列绑定到代码中的特定数据表列?

【问题讨论】:

【参考方案1】:

XAML 绑定对我不起作用,因为我的 DataTable 是在运行时生成的,因此在设计时没有什么可以绑定的。无论如何,我偶然发现了如何在这里做我想做的事情。

我的问题是因为由于某种原因,当我将ItemSource 设置为表本身而不是表的DefaultView 时,没有抛出错误,尽管我后来读到,表没有实现所需的界面。但是没有任何错误可以告诉我区别,我没有什么可以继续找出为什么我的网格会显示为空的。

DataGridName.DataContext = DataSetName.DataTableName;
DataGridName.ItemsSource = DataSetName.DataTableName.DefaultView;

((DataGridTextColumn)DataGridName.Columns[1]).Binding = new Binding("DataTableColumnName1");
((DataGridTextColumn)DataGridName.Columns[0]).Binding = new Binding("DataTableColumnName2");
((DataGridTextColumn)DataGridName.Columns[2]).Binding = new Binding("DataTableColumnName3");

【讨论】:

【参考方案2】:

将您的 DataTable 绑定到 DataGrid,将 AutoGenerateColumns 设置为 False,然后将您想要的任何列添加到 DataGrid.Columns。下面是一个使用名为 Collection 的 DataTable 的示例,它有两列:ID 和 Value。

<DataGrid
    ItemsSource="Binding Path=Collection"
    AutoGenerateColumns=False
    >

    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Binding="Binding Path=Id" />
        <DataGridTextColumn Header="Value" Binding="Binding Path=Value" />
    </DataGrid.Columns>
</DataGrid>

【讨论】:

以上是关于在 WPF 中,如何将数据网格列绑定到数据表的特定列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 wpf 控件上绑定数据网格列的可见性?

在 DataTable 更改 WPF 后更新绑定到 DataTable 的 DataGrid

如何将数据放入WPf数据网格特定单元格中

是否可以在 mvvm 模式中获取 wpf 数据网格上的动态列?

WPF 网格 — 按特定顺序调整列的大小

如何将数据网格行的背景绑定到特定颜色?