在WPF中,我如何将DataGrid列绑定到DataTable的特定列?

9
我有一个包含许多列的数据表格,需要在其中一个数据网格中只显示其中的几列。我需要一个代码示例来完成此操作。我找到了一大堆示例,告诉我要将AutoGenerateColumns设置为true,并将表格设置为DataContext以显示DataTable中的所有列。我猜我可以编写一段代码页来隐藏我不需要的所有列,重新排列剩余的列以达到适当的顺序和大小,但肯定还有更优雅的方法。
在设计器中,我已经构建了要显示的列集合,我获得了数据表格,如何在代码中将现有的数据网格列绑定到特定的数据表格列?
2个回答

21

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接