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

问题描述:

我有一个有很多列的数据表,还有一个我只需要显示其中几列的数据表。我需要一个如何做的代码样本。我发现一大堆示例告诉我将AutoGenerateColumns设置为true,并将该表设置为DataContext以显示我的DataTable中的所有列。然后我想我可以放入一页代码来隐藏我不需要的所有列,重新排列剩余的列以适当的顺序和大小,但肯定必须有更优雅的方式。在WPF中,如何将datagrid列绑定到数据表的特定列?

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

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

我开始明白为什么XAML太酷了。 – 2013-10-08 18:18:32

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