グループ集計
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コントロールの導入は大きな力になるのではないでしょうか。


