【发布时间】:2012-05-10 13:33:21
【问题描述】:
我有数据表作为 DataGrid 的项目源,这个数据表有很多列。是否可以在不创建新表的情况下显示几列而不是全部?
【问题讨论】:
我有数据表作为 DataGrid 的项目源,这个数据表有很多列。是否可以在不创建新表的情况下显示几列而不是全部?
【问题讨论】:
是的,是的。只需标记AutoGenerateColumns=False 并手动定义您的列。您可以使用普通的文本绑定列、复选框列、自定义 XAML 模板列等,如您在 documentation 中所见。
<DataGrid ItemsSource="{Binding DataSource}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Simple Value"
Binding="{Binding SimpleValue}" Width="*" />
<DataGridTemplateColumn Width="*" Header="Complex Value">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding ComplexValue}"/>
<TextBox Text="{Binding ComplexValue2}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
【讨论】:
此外,您可以处理DataGrid.AutoGeneratingColumn 事件并为您不想显示的列设置e.Cancel = true。这样您就不必手动定义要显示的列。
【讨论】:
是的,非常是的。如果您的表结构和列名保持不变,则在 Datagrid XAML 中设置 AutoGenerateColums = False 并手动创建所有列。
<dg:DataGrid Name="mydg" ItemsSource="{Binding Data}" AutoGenerateColumns="False">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Col 0" Binding="{Binding FirstColumnName}" />
<dg:DataGridTextColumn Header="Col 1" Binding="{Binding SecondColumnName}" />
</dg:DataGrid.Columns>
</dg:DataGrid>
然后在代码隐藏中简单地提供类似的源代码
mydg.ItemSource = Data.DefaultView;
现在,当您的 DataTable 包含列 FirstColumnName 和 SecondColumnName 时,它们将被数据绑定到您的 Datagrid。
【讨论】:
dg:前缀...,是必须的吗?