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

时间:2010-09-02 17:37:14

标签: wpf datagrid datatable datacolumn

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

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

2 个答案:

答案 0 :(得分:18)

将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>

答案 1 :(得分:4)

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");