WPF привязка Datagrid и отображение столбцов

У меня есть datatable как Item source для DataGrid, у этого datatable есть много столбцов. Возможно ли отображать несколько столбцов, а не все из них, без создания новой таблицы?

Ответ 1

Да, это так. Просто отметьте AutoGenerateColumns=False и вручную определите свои столбцы. Вы можете использовать обычные текстовые столбцы, столбцы столбцов, настраиваемые столбцы шаблона XAML и т.д., Как вы можете видеть в документации документации MSDN.

<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>

Ответ 2

Кроме того, вы можете обработать DataGrid.AutoGeneratingColumn событие и установить e. Отменить= true для столбцов, которые вы не хотите показывать. Таким образом, вам не нужно вручную определять столбцы, которые вы хотите показать.

Ответ 3

Да, да очень. Если ваша структура таблицы и имя столбца остаются постоянными, то в 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.