CodeZine(コードジン)

特集ページ一覧

Silverlight/WPFで使える逆引きTips集
――DataGrid機能(WPF後編)

(17) DataGridコントロール WPF後編

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/06/28 14:00
目次

05.並べ替え可能な列を限定する

 既定ではすべてのデータの並べ替えが可能になっています。並べ替え可能な列を限定するには、並べ替えを禁止したい列のCanUserSortプロパティにFalseを設定します。

 下記は並べ替え可能な列を限定する例です。「First Name」「Middle Name」「Last Name」列を除いて並べ替えができないようにしています。

 コードは見やすくするためにいくつかの属性を省略しています。詳細はサンプルコードをダウンロードして参照ください。

並べ替え可能な列を限定する例
並べ替え可能な列を限定する例
XAMLの例
<DataGrid>
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="CustomerIDColumn" CanUserSort="False" />
        <DataGridCheckBoxColumn x:Name="NameStyleColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="TitleColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="FirstNameColumn" CanUserSort="True" />
        <DataGridTextColumn x:Name="MiddleNameColumn" CanUserSort="True" />
        <DataGridTextColumn x:Name="LastNameColumn" CanUserSort="True" />
        <DataGridTextColumn x:Name="SuffixColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="CompanyNameColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="SalesPersonColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="EmailAddressColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="PhoneColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="PasswordHashColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="PasswordSaltColumn" CanUserSort="False" />
        <DataGridTextColumn x:Name="RowguidColumn" CanUserSort="False" /> 
    </DataGrid.Columns>
</DataGrid>
ポイント

  並べ替え可能な列を限定するには、並べ替えを禁止したい列のCanUserSortプロパティにFalseを設定する。

06.ComboBoxで値を選択できるようにする

 このTipsではDataGridにCustmoertテーブルを表示させ、Title列にComboBoxを表示して値を選択できるようにする例を紹介します。

ComboBoxに表示するアイテム用クラスを作成する

 最初にComboBoxに表示するアイテムを作成します。

 プロジェクトにTitleListというクラスを追加します。このクラスはTitle列に表示させるデータ「Mr.」「Ms.」「Sr.」「Sra.」をListとして作成するものです。

VBの例
Public Class TitleList
    Inherits List(Of String)

    Public Sub New()
        Me.Add("Mr.")
        Me.Add("Ms.")
        Me.Add("Sr.")
        Me.Add("Sra.")
    End Sub
End Class
C#の例
class TitleList : List<string>
{
    public TitleList()
    {
        this.Add("Mr.");
        this.Add("Ms.");
        this.Add("Sr.");
        this.Add("Sra.");
    }
}

リソースの追加

 次にComboBoxに表示するデータ(TitleListクラス)をリソースに追加します。

XAMLの例
 <Window.Resources>
<!--★★★リソースとしてTitleListを追加★★★-->
<my:TitleList x:Key="TitleList" />
 :省略
</Window.Resources>

Title列をComboBox列に変更し、作成したリストとデータをバインドする

  元々あったTitle列を削除し、XAMLを下記のように変更します。

 まず<DataGridTemplateColumn>タグを準備します。その中にデータ表示用の<DataGridTemplateColumn.CellTemplate>、データを選択させるComboBoxを表示する<DataGridTemplateColumn.CellEditingTemplate>タグを配置します。このとき、ComboBoxにはリソースに準備していたTitleListが表示されるようにItemSourceを設定します。

XAMLの例
 <!-- ↓元々あった列は削除する -->
<!--<DataGridTextColumn x:Name="TitleColumn" Binding="{Binding Path=Title}" Header="Title" Width="SizeToHeader" />-->
<!--★★★ComboBox列にする ここから★★★-->
<DataGridTemplateColumn Header="Title" Width="60">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Title}" /> ←通常時のデータ表示用
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{StaticResource TitleList}" SelectedItem="{Binding Title}"></ComboBox> ←現在選択されているデータとリストのバインド
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<!--★★★ComboBox列にする ここまで★★★-->
ComboBoxで値を選択できるようにする例
ComboBoxで値を選択できるようにする例
ポイント

 列にカスタマイズしたComboBoxを表示するには、<DataGridTemplateColumn>でデータ表示部分とComboBox表示部分の定義を作成する。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Silverlight/WPFで使える逆引きTips集

もっと読む

著者プロフィール

  • HIRO(ヒロ)

    HIRO's.NETのHIROです。 とある半導体工場のSEです。 VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。 最近はBlog でPowerShellについて書いています。 2008/07/07にPowerShell from Japan!!という...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5