03.グループ化のスタイルを設定する
先ほどのTipsでは項目をグループ化する方法について説明しましたが、グループ化の節目はデータを見なければ知ることができません。そこで、グループごとに折りたためるようにスタイルを設定する例を紹介します。
DataGridはGroupStyleというプロパティを持っており、この中で折りたたみのスタイルを作成します。折りたたみには<Expander>を使用し、ヘッダー部分は<Expander.Header>で、データ部分は<Expander.Content>で定義します。
下記は、グループ化のスタイルを設定する例です。Title列でグルーピングしており、「Mr.」「Sr.」「Sra.」といった単位で折りたたみができるようになります。
データ量が多い場合、グループ化にスタイルを設定すると表示までに時間が掛かるので注意してください。
<Window.Resources> <my:CustomerDS x:Key="CustomerDS" /> <CollectionViewSource x:Key="CustomerViewSource" Source="{Binding Path=Customer, Source={StaticResource CustomerDS}}"> <CollectionViewSource.GroupDescriptions> <!-- ★★★Title列をグループ化★★★ --> <PropertyGroupDescription PropertyName="Title" /> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> </Window.Resources> <DataGrid> <!-- ★★★グルーピングのスタイル設定 ここから★★★ --> <DataGrid.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <Expander> <Expander.Header> <DockPanel> <TextBlock Text="Title" /> </DockPanel> </Expander.Header> <Expander.Content> <ItemsPresenter /> </Expander.Content> </Expander> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </DataGrid.GroupStyle> <!-- ★★★グルーピングのスタイル設定 ここまで★★★ -->
グループ化のスタイルを設定するにはGroupStyleを使用する。
04.データを並び替えを禁止する
既定では、DataGridのヘッダーをクリックすることでデータの並べ替えを行うことが可能になっています。
データの並べ替えを禁止したい場合は、CanUserSortColumnsプロパティにFalseを設定します。
下記は、データの並べ替えを禁止する例です。チェックボックス[並べ替えを許可]のチェック状態に合わせて、並べ替えの有効/無効を切り替えます。
<DataGrid CanUserSortColumns="False"> :省略 </DataGrid>
' [並べ替えを許可]チェック時の処理 Private Sub chkSortEnable_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles chkSortEnable.Checked '★★★並べ替えを有効にする★★★ CustomerDataGrid.CanUserSortColumns = True End Sub ' [並べ替えを許可]チェックオフ時の処理 Private Sub chkSortEnable_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles chkSortEnable.Unchecked '★★★並べ替えを無効にする★★★ CustomerDataGrid.CanUserSortColumns = False End Sub
// [並べ替えを許可]チェック時の処理 private void chkSortEnable_Checked(object sender, RoutedEventArgs e) { // ★★★並べ替えを有効にする★★★ customerDataGrid.CanUserSortColumns = true; } // [並べ替えを許可]チェックオフ時の処理 private void chkSortEnable_TouchUp(object sender, TouchEventArgs e) { // ★★★並べ替えを無効にする★★★ customerDataGrid.CanUserSortColumns = false; }
データの並べ替えを禁止するにはCanUserSortColumnsプロパティにFalseを設定する。