WPF Datagrid绑定和列显示

Wil*_*oat 13 c# wpf

我有数据表作为DataGrid的Item源,这个数据表有很多列.是否可以在不创建新表的情况下显示几列而不是所有列?

Avn*_*tan 24

是的.只需标记AutoGenerateColumns=False并手动定义列.您可以使用常规的文本绑定列,复选框列,自定义XAML模板列等,如MSDN Library文档中所示.

<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>
Run Code Online (Sandbox Code Playgroud)


Nik*_*wal 6

是的,非常好.如果表结构和列名保持不变,则在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>
Run Code Online (Sandbox Code Playgroud)

然后在codebehind中简单提供Source之类的

mydg.ItemSource = Data.DefaultView;
Run Code Online (Sandbox Code Playgroud)

现在,当您的DataTable包含列时FirstColumnName,SecondColumnName它们将被数据绑定到您的Datagrid.


Sti*_*ipo 5

此外,您可以处理DataGrid.AutoGeneratingColumn事件,并为不希望显示的列设置e.Cancel = true.这样,您不必手动定义要显示的列.