Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

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

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

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

  本連載ではSilverlightやWPFで使えるTipsを逆引き形式で紹介していきます。今回は前回に引き続きWPFで使用できるDataGrid機能のノウハウを解説します。

目次

 Silverlight編は次の回で紹介する予定です。あらかじめご了承ください。

対象読者

 Visual BasicまたはVisual C#、および、Silverlight/WPFのプロジェクト作成方法、XAMLについて基礎的な知識がある方を対象としています。

必要な環境

 下記を使ってプログラミングできる環境(筆者はこの環境で検証し執筆しています)。

  • Visual Studio 2010
  • Microsoft Silverlight 4 Tools for Visual Studio 2010

 Microsoft Silverlight 4 Tools for Visual Studio 2010は、Microsoftダウンロードセンターより入手できます。Visual Studio 2010が準備できない方は、Visual Studio 2008およびVisual Studio 2008 Silverlight Tools 3.0の組み合わせでも構いません。ただし、この場合は本連載で取り上げるTipsが動作しない可能性もあります。あらかじめご了承ください。

今回紹介するTips

  1. 読み取り専用に設定する
  2. 項目をグループ化する
  3. グループ化のスタイルを設定する
  4. データを並び替えを禁止する
  5. 並べ替え可能な列を限定する
  6. ComboBoxで値を選択できるようにする
  7. 独自の列を追加する
  8. データの編集が開始/終了されたことを知る

01.読み取り専用に設定する

  DataGridを読み取り専用にし、データを変更できないようにするにはIsReadOnlyプロパティにTrueを設定します。

 下記は読み取り専用にする例です。

XAMLの例
<DataGrid IsReadOnly="True">
 :省略
</DataGrid>
VBの例
 '★★★読み取り専用にする★★★
CustomerDataGrid.IsReadOnly = True
C#の例
 // 読み取り専用にする
customerDataGrid.IsReadOnly = true;
ポイント

DataGridを読み取り専用にするにはIsReadOnlyプロパティにTrueを設定する。 

02.項目をグループ化する

  DataGridの任意の項目をグループ化するには ICollectionViewクラスを使用します。

 XAMLでは<CollectionViewSource>タグ<CollectionViewSource.GroupDescriotion>タグを配置し、どの項目をグループ化するかを設定します。グループ化する項目は<PropertGroupDescription>で指定します。

 また、コードからグループ化する場合はICollectionViewクラスのGroupDescription.Addメソッドでグループ化する項目を設定します。

 下記は項目をグループ化する例です。

 項目Titleをグループ化します。「Mr.」や「Ms.」でグループ化したデータが表示されます。

項目をグループ化する例
項目をグループ化する例
XAMLの例
<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>
<Grid DataContext="{StaticResource CustomerViewSource}">
    <DataGrid>
     : 省略
    </DataGrid>
</Grid>
VBの例
Dim customerView As System.ComponentModel.ICollectionView =
    CollectionViewSource.GetDefaultView(CustomerDataGrid.ItemsSource)

'ビューが存在しグループ化できるか?
If customerView IsNot Nothing And customerView.CanGroup = True Then
    customerView.GroupDescriptions.Clear()
    '★★★Title列をグループ化する★★★
    customerView.GroupDescriptions.Add(New PropertyGroupDescription("Title"))
End If
C#の例
System.ComponentModel.ICollectionView customerView = 
    CollectionViewSource.GetDefaultView(customerDataGrid.ItemsSource);

// ビューが存在しグループ化できるか?
if (customerView != null && customerView.CanGroup == true)
{
    customerView.GroupDescriptions.Clear();
    // ★★★Title列をグループ化する★★★
    customerView.GroupDescriptions.Add(new PropertyGroupDescription("Title"));
}
ポイント

 項目のグループ化は XAMLでは<CollectionViewSource>,<CollectionViewSource.GroupDescription>で設定する。コードからはICollectionViewSourceクラスのGroupDescription.Addメソッドで設定する。


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

著者プロフィール

  • HIRO(ヒロ)

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

バックナンバー

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

もっと読む

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