我有一个DataTable作为DataGrid的项源,这个DataTable有很多列。是否可以仅显示几列而不是全部列,而无需创建新表?
是的,它是可以的。只需要标记AutoGenerateColumns=False
并手动定义列。您可以使用正常的文本绑定列、复选框列、自定义XAML模板列等等,如您在文档中所见。
<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 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:
前缀?这是必须的吗? - Allan Ruin