FlexGrid for WinForms
サマリー

データの集計はグリッドの最も重要な機能の 1 つです。類似したデータをグループ化して、Sum、Average、Count、Max、Min などのさまざまな集計値を簡単に計算できます。

FlexGrid では、C1FlexGrid クラスの SubTotal メソッドを使用して、簡単にデータを集計できます。このメソッドは、小計行を追加して(小計行以外の)通常の行の集計データを表示するほか、階層的な集計もサポートしています。このメソッドにはさまざまなオーバーロードがあり、集計に関連するさまざまなシナリオに対処できる柔軟性を持っています。これらのオーバーロードはいずれも AggregateEnum という共通のパラメータを持ち、実行する集計の種類を設定することができます。さまざまなオーバーロードのその他のパラメータを使用することで、アウトラインレベル、開始列と終了列、集計する値が含まれる列などを設定することができます。

データの集計

小計の作成

次の例は、WinForms FlexGrid で SubTotal メソッドを使用して、Score 列に基づいて平均を計算する方法を示しています。

// グリッドに存在する既存の小計をすべてクリアします
c1FlexGrid1.Subtotal(AggregateEnum.Clear);
                                        
// レベル:1、グループ:「Course」列、集計(平均):Score、Attendanceでグリッドに小計を追加します
c1FlexGrid1.Subtotal(AggregateEnum.Average, 1, 3, 3, 4, "Average for {0}");
' グリッドに存在する既存の小計をすべてクリアします
c1FlexGrid1.Subtotal(AggregateEnum.Clear)
' レベル:1、グループ:「Course」列、集計(平均):Score、Attendanceでグリッドに小計を追加します
c1FlexGrid1.Subtotal(AggregateEnum.Average, 1, 3, 3, 4, "Average for {0}")

小計のスタイル

Subtotal メソッドは、集計情報を含む行に追加する際に、新しい行に組み込みの小計スタイルを自動的に割り当てます。小計行の外観をカスタマイズするには、デザイナのスタイルエディタを使用してアウトラインスタイルのプロパティを変更するか、コードを使用します。次の例は、WinForms FlexGrid で 3 つのレベルの小計のスタイルを設定する方法を示しています。

// 小計をレベル0でスタイル設定します
CellStyle s = c1FlexGrid1.Styles[CellStyleEnum.Subtotal0];
s.BackColor = Color.Black;
s.ForeColor = Color.White;
s.Font = new Font(c1FlexGrid1.Font, FontStyle.Bold);
                                        
// 小計をレベル1でスタイル設定します
s = c1FlexGrid1.Styles[CellStyleEnum.Subtotal1];
s.BackColor = Color.DarkBlue;
s.ForeColor = Color.White;
// 小計をレベル2でスタイル設定します
s = c1FlexGrid1.Styles[CellStyleEnum.Subtotal2];
s.BackColor = Color.DarkRed;
s.ForeColor = Color.White;
c1FlexGrid1.AutoSizeCols();
Dim s As CellStyle = c1FlexGrid1.Styles(CellStyleEnum.Subtotal0)
    s.BackColor = Color.Black
    s.ForeColor = Color.White
    s.Font = New Font(c1FlexGrid1.Font, FontStyle.Bold)

    s = c1FlexGrid1.Styles(CellStyleEnum.Subtotal1)
    s.BackColor = Color.DarkBlue
    s.ForeColor = Color.White

    s = c1FlexGrid1.Styles(CellStyleEnum.Subtotal2)
    s.BackColor = Color.DarkRed
    s.ForeColor = Color.White
    c1FlexGrid1.AutoSizeCols()      

小計のカスタマイズ

FlexGrid では、組み込みの集計オプションに加えて、カスタム式を連結モードで作成し、それらをグループの小計として集計値と一緒に使用することができます。列のカスタム式は、Column クラスの GroupExpression プロパティを使用して指定します。次の例は、WinForms FlexGrid の Qualified 列の小計としてカスタム式を作成する方法を示しています。

小計のカスタマイズ

public void CustomizeSubTotal(C1FlexGrid c1FlexGrid1)
{
  List<GroupDescription> grps = new List<GroupDescription>();
  //列「Course」のグループを作成します
  GroupDescription grp = new GroupDescription("Course", ListSortDirection.Descending, true);
  grps.Add(grp);
                                        
  //上記のグループに従ってFlexGridをグループ化します
  c1FlexGrid1.GroupDescriptions = grps;
                                        
  //カスタムの計算式を使用してFlexGridに新しい列を追加します
  var column = c1FlexGrid1.Cols.Add();
  column.Name = "Qualified";
  column.DataType = typeof(object);
  column.Caption = "Qualified(>5000)";
  column.AllowEditing = false;
  column.Expression = "[Attendance] * [Score]";
                                        
  //GroupExpression の実装 
  c1FlexGrid1.Cols["Score"].GroupExpression = "=Average([Score])";
  c1FlexGrid1.Cols["Attendance"].GroupExpression = "=Average([Attendance])";
  c1FlexGrid1.Cols["Qualified"].GroupExpression = "=iif(Average([Score]*[Attendance])<5000,false,true)";
  c1FlexGrid1.AutoSizeCols();
}           
Public Sub CustomizeSubTotal(ByVal c1FlexGrid1 As C1FlexGrid)
    Dim grps As List(Of GroupDescription) = New List(Of GroupDescription)()
    '列「Course」のグループを作成します
    Dim grp As GroupDescription = New GroupDescription("Course", ListSortDirection.Descending, True)
    grps.Add(grp)
    '上記のグループに従ってFlexGridをグループ化します
    c1FlexGrid1.GroupDescriptions = grps
    'カスタムの計算式を使用してFlexGridに新しい列を追加します
    Dim column = c1FlexGrid1.Cols.Add()
    column.Name = "Qualified"
    column.DataType = GetType(Object)
    column.Caption = "Qualified(>5000)"
    column.AllowEditing = False
    column.Expression = "[Attendance] * [Score]"
    'GroupExpression の実装
    c1FlexGrid1.Cols("Score").GroupExpression = "=Average([Score])"
    c1FlexGrid1.Cols("Attendance").GroupExpression = "=Average([Attendance])"
    c1FlexGrid1.Cols("Qualified").GroupExpression = "=iif(Average([Score]*[Attendance])<5000,false,true)"
    c1FlexGrid1.AutoSizeCols()
End Sub       
関連トピック