18

DataGridのアイテムソースとしてデータテーブルがあります。このデータテーブルには多くの列があります。新しいテーブルを作成せずに、すべての列ではなく少数の列を表示することは可能ですか?

4

3 に答える 3

26

はい、そうです。列をマーク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>
于 2012-05-10T13:37:48.793 に答える
7

また、DataGrid.AutoGeneratingColumnイベントを処理し、表示したくない列に対してe.Cancel = true を設定することもできます。この方法では、表示する列を手動で定義する必要はありません。

于 2012-05-10T13:55:36.240 に答える
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>

そして、単純なコードビハインドでソースを次のように提供します

mydg.ItemSource = Data.DefaultView;

DataTable に列が含まれている場合FirstColumnNameSecondColumnNameそれらは Datagrid にデータバインドされます。

于 2012-05-10T13:35:09.043 に答える