SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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

  本連載では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メソッドで設定する。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
03.グループ化のスタイルを設定する

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6006 2011/06/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング