FlexGrid for WPF
Group Data using FlexGridGroupPanel

FlexGrid では、FlexGridGroupPanel を使用してデータをグループ化できます。このコントロールは、グループのデータを整理するために設計された独立したコントロールです。FlexGridGroupPanel は、C1.WPF.FlexGridGroupPanel 拡張アセンブリとして FlexGrid に付属します。FlexGridGroupPanel は、グリッドのデータソースとして使用されるコレクションの ICollectionView インタフェースを使用してグループを管理します。グループに対するすべての変更は、同じ ICollectionView に連結されている他のコントロールから可視になります。

メモ: 非連結グリッドにグループ化機能は実装できません。

FlexGrid でデータをグループ化するには、FlexGrid の上に FlexGridGroupPanel を追加して、列をドラッグする場所になる空のパネルを追加する必要があります。グループが作成されたら、対応する列は非表示になります。ただし、HideGroupedColumns プロパティを false に設定すると、この動作は無効になります。グループマーカーをグループ化領域内にドラッグして、グループを再配置できます。また、グリッド内にドラッグしてグループを削除し、列を復元することができます。また、グループマーカーには、グループを削除するための閉じるボタン([x])があります。

FlexGridGroupPanel は、接続されている FlexGrid から必要な属性を受け取ります。グリッドの列ヘッダーの背景、前景、フォントを変更すると、FlexGridGroupPanel は自動的にこれらの要素を使用して、列ヘッダーを補完するグループマーカーをレンダリングします。

次の図は、ColorLine でグループ化された FlexGrid のデータを示します。

Grouping through FlexGridGroupPanel

ドラッグマーカーの色は、DragMarkerColor プロパティを設定して変更できます。グループマーカーをクリックして、昇順または降順でデータをソートできます。適用されているソートを削除するには、Ctrl キーを押して、削除するグループヘッダーをクリックします。

FlexGrid で FlexGridGroupPanel によるグループ化を有効にするには

  1. XAML ビューで、FlexGridGroupPanel コントロールを FlexGrid コントロールの上にドラッグします。
  2. 次のコードで示すように、FlexGridGroupPanel の FlexGrid プロパティを設定して FlexGrid オブジェクトを参照します。
    XAML
    コードのコピー
    <c1:C1FlexGridGroupPanel 
        Background="WhiteSmoke" 
        FlexGrid="{Binding ElementName=grid}"/>
      <c1:C1FlexGrid x:Name="grid" Grid.Row="1" />
    

FlexGridGroupPanel を使用してカスタムグループコンバータを作成するには

デフォルトでは、FlexGridGroupPanel を使用して列に基づいてデータをグループ化できます。

新しいグループの作成時に、FlexGridGroupPanel は、アプリケーションが新しいグループをカスタマイズできるように PropertyGroupCreated イベントを発生させます。新しいグループをカスタマイズし、事前に定義した制約に基づいてカスタムグループコンバータを作成できます。たとえば、コードで定義した条件に基づいて任意の金額フィールドを高、中、低に区分したり、日時フィールドをグループ化するためのカスタムグループコンバータを作成できます。

以下はコード例です

C#
コードのコピー
/// <summary>
/// C1FlexGridGroupPanel によって作成されたグループ記述子をカスタマイズします。
/// </summary>
void _groupPanel_PropertyGroupCreated(object sender, PropertyGroupCreatedEventArgs e)
{
  var pgd = e.PropertyGroupDescription;
  switch (pgd.PropertyName)
  {
    case "Introduced":
      pgd.Converter = new DateTimeGroupConverter();
      break;
    case "Price":
      pgd.Converter = new AmountGroupConverter(1000);
      break;
    case "Cost":
      pgd.Converter = new AmountGroupConverter(300);
      break;
  }
}

このコードは、PropertyGroupCreated イベントを処理し、データソースのいくつかの列にカスタムコンバータを割り当てます。この例の DateTimeGroupConverter クラスと AmountGroupConverter クラスは、DateTime 値と double 値をいくつかの範囲にグループ化するシンプルなコンバータです。

次の図に、カスタムグループ化の効果を示しています。

いくつかの項目は複数のグループに表示されていることがわかります。たとえば、DateTimeGroupConverter は、日付を今週、今月、今年にグループ化します。「今週」グループにある項目は、「今年」グループにも含まれます。

これは ICollectionView インタフェースの機能で、FlexGrid または FlexGridGroupPanel コントロール専用ではありません。


関連トピック