我有一个包含许多列的数据表,以及一个数据网格,我需要在其中只显示其中的一些列。我需要一个如何做的代码示例。我发现了一大堆示例,告诉我将AutoGenerateColumns设置为true并将表设置为DataContext以显示DataTable中的所有列。我想我可以放入一个代码页来隐藏我不需要的所有列,将剩余的列重新排列为正确的顺序和大小,但肯定必须有更优雅的方式。
在设计器中我构建了我想要显示的列集合,我得到了datable,如何将现有的datagrid列绑定到我的代码中的特定数据表列?
答案 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");