グループ集計
C1FlexGridコントロールでは、データをグループ化すると、グループごとに列単位でデータの集計ができます。この機能もとても簡単で、集計する列の「GroupAggregate」プロパティを設定するだけでC1FlexGridコントロールが自動的に集計を計算して表示してくれます。データを変更すると、集計結果も自動的に再計算されます。
GroupAggregateプロパティの設定値はAggregate列挙体のメンバで、以下の集計を行うことができます。
メンバ名 | 説明 |
None | 集計なし |
Sum | グループ内のすべての値の合計を返す |
Count | グループ内のnull以外の数を返す |
Average | グループ内のnull以外のセルの平均値を返す |
Maximum | グループ内の最大値を返す |
Minimum | グループ内の最小値を返す |
Range | グループ内の最大値と最小値の差を返す |
Std | グループ内の値の標本標準偏差を返す(n-1に基づく式を使用) |
Var | グループ内の値の標本分散を返す(n-1に基づく式を使用) |
StdPop | グループ内の値の母標準偏差を返す(nに基づく式を使用) |
VarPop | グループ内の値の母分散を返す(nに基づく式を使用) |
今回は、グループ化したカテゴリ名ごとに価格の合計金額を算出するため、操作対象に「Columns("ListPrice")」を指定し、GroupAggregateプロパティに「Aggregate.Sum」を指定します。集計結果はグループヘッダ行に表示されるため、集計を表示するにはC1FlexGridコントロールの「AreGroupHeadersFrozen」プロパティを「false」に設定しておきます。
Private Sub CheckBox3_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox3.Checked ..... ..... 'カテゴリ毎に価格の合計を集計 C1FlexGrid1.AreRowGroupHeadersFrozen = False C1FlexGrid1.Columns("ListPrice").GroupAggregate = Aggregate.Sum
private void checkBox3_Checked(object sender, RoutedEventArgs e) { ..... ..... //カテゴリ毎に価格の合計を集計 C1FlexGrid1.AreRowGroupHeadersFrozen = false; C1FlexGrid1.Columns["ListPrice"].GroupAggregate = Aggregate.Sum;
グループ集計を解除するには、GroupAggregateプロパティに「Aggregate.None」を指定します。
Private Sub CheckBox3_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox3.Checked '現在のグループ化を一度解除 view.GroupDescriptions.Clear() CheckBox1.IsChecked = False '改めて価格でグループ化 view.GroupDescriptions.Add(New PropertyGroupDescription("CategoryName")) 'カテゴリ毎に価格の合計を集計 C1FlexGrid1.AreRowGroupHeadersFrozen = False C1FlexGrid1.Columns("ListPrice").GroupAggregate = Aggregate.Sum End Sub Private Sub CheckBox3_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox3.Unchecked 'グループ集計を解除 C1FlexGrid1.Columns("ListPrice").GroupAggregate = Aggregate.None 'グループ化を解除 view.GroupDescriptions.Clear() CheckBox1.IsChecked = False End Sub
private void checkBox3_Checked(object sender, RoutedEventArgs e) { //現在のグループ化を一度解除 view.GroupDescriptions.Clear(); CheckBox1.IsChecked = false; //改めて価格でグループ化 view.GroupDescriptions.Add(new PropertyGroupDescription("CategoryName")); //カテゴリ毎に価格の合計を集計 C1FlexGrid1.AreRowGroupHeadersFrozen = false; C1FlexGrid1.Columns["ListPrice"].GroupAggregate = Aggregate.Sum; } private void checkBox3_Unchecked(object sender, RoutedEventArgs e) { //グループ集計を解除 C1FlexGrid1.Columns["ListPrice"].GroupAggregate = Aggregate.None; //グループ化を解除 view.GroupDescriptions.Clear(); CheckBox1.IsChecked = false; }
まとめ
データベースからデータを取り出して一覧表にする場合、多くはデータを何らかの形で集計して使用します。C1FlexGridコントロールは、そのような集計機能もあらかじめ組み込まれているため、面倒なコーディングの必要は無く、すぐにその機能を使うことができます。また、複数の同じデータがあるセルを1つのセルにまとめてしまえば、表の見やすさは格段に向上します。
データベースのフロントエンドアプリケーション開発に苦労しているのであれば、C1FlexGridコントロールの導入は大きな力になるのではないでしょうか。