C1FlexGridコントロールについて
C1FlexGridコントロールの概要は、前回の記事『独自の入力グリッドを持ったWPFアプリケーションの作成』を参照ください。ここでは、今回使用するC1FlexGridコントロールの連結モードについて説明しておきます。
C1FlexGridコントロールの連結モード
C1FlexGridコントロールは、ItemsSourceプロパティを使ってデータをグリッドに挿入します。このItemsSourceプロパティは、IEnumerableインターフェイスを実装するオブジェクトを設定するようになっていますが、ほとんどの場合はこれより少し高いレベルで作業を行わせるため、ICollectionViewインターフェイスを実装するオブジェクトを使用します。
ICollectionViewインターフェイスは、WPFの主要なデータ連結インターフェイスで、WindowsフォームではIBindlingListインターフェイスがこの役割を果たしていました。このインターフェイスは豊富な機能を備えており、データを連結するだけでなく、データの並び変え(ソート)や特定のデータだけを表示するフィルタ機能、データのページング/グループ化などの機能も提供します。
そして、このICollectionViewインターフェイスを実装するためのクラス「ListCollectionView」が用意されています。ListCollectionViewクラスを使ってデータをC1FlexGridコントロールに設定すると、特に難しいコードを書かなくてもデータの並び変え(ソート)や特定のデータだけを表示するフィルタ機能、データのページング/グループ化などの機能を使うことができるようになります。
連結モードでのデータ連結は、次の手順を取ります。
- データをIListクラスのオブジェクトに設定
- IListオブジェクトをもとにListCollectionViewクラスのインスタンスを作成
- ItemSourceプロパティにListCollectionViewクラスのインスタンスを設定
たったこれだけの作業で、データをC1FlexGridコントロールに連結モードで連結させることができます。
データの並び変え
ICollectionViewインターフェイスを使うことで、C1FlexGridコントロールはソートをサポートします。列ヘッダをクリックすると、データは昇順または降順でソートされます。グリッドをソートすると、対応する列に現在のソート方向を示す三角形が表示されます。
C1FlexGridでは、一般的なソート切り替え動作に加え、[Ctrl]キーを押しながら列ヘッダをクリックすることでソートを解除できます。これにより、列に適用されているソートは解除され、データは元の順序で表示されます。
実際のソート処理は、データソースとして使用されるICollectionViewインターフェイスによって実行されます。C1FlexGridコントロールは単にマウスクリックを検出するだけであり、ソート処理はこのデータソースオブジェクトに任されます。
データのグループ化
ICollectionViewインターフェイスではグループ化がサポートされており、データを簡単に階層化して表示できます。例えば次のコードは、列「CategoryName」にある同じカテゴリ名のデータを1つに集約しグループ化します。
view.GroupDescriptions.Add(New PropertyGroupDescription("CategoryName"))
各データグループにはグループ名と[▲]のボタンが付き、このボタンを使ってユーザーはグループデータをマウス1つで折りたたみ/展開ができます。