作成日: 2023/02/21 最終更新日: 2023/02/21
文書種別
使用方法
詳細
Subtotalメソッドを使用すると、同じデータを持つ複数行がひとつのグループとして扱われ、自動的にノード行(*)挿入と小計計算が行われます。これにより、アウトラインが作成されてツリー表示をすることができるようになります。
非連結モードの場合、手動で追加したそれぞれの列に対してSubtotalメソッドを実行します。

* ノード行については、こちらのナレッジをご参照ください。
最初に、Tree.ColumnとTree.Styleを用いて、アウトラインツリーを表示する列とスタイルを指定します。
次に、グループ化する列をソートして同じデータをまとめます。
最後に、小計を表示する列に対してSubtotalメソッドを実行します。
※アウトラインツリーの設定を最初に行わないと、Subtotalメソッドで指定した「小計行に挿入するテキスト」が正しく表示されない事がありますので、ご留意ください。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
非連結モードの場合、手動で追加したそれぞれの列に対してSubtotalメソッドを実行します。
* ノード行については、こちらのナレッジをご参照ください。
最初に、Tree.ColumnとTree.Styleを用いて、アウトラインツリーを表示する列とスタイルを指定します。
次に、グループ化する列をソートして同じデータをまとめます。
最後に、小計を表示する列に対してSubtotalメソッドを実行します。
※アウトラインツリーの設定を最初に行わないと、Subtotalメソッドで指定した「小計行に挿入するテキスト」が正しく表示されない事がありますので、ご留意ください。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' FlexGridの設定
C1FlexGrid1.Rows.Count = 37
C1FlexGrid1.Cols.Count = 5
C1FlexGrid1.Cols(2).Format = "c"
C1FlexGrid1.Cols(3).Format = "c"
C1FlexGrid1(0, 1) = "地域"
C1FlexGrid1(0, 2) = "商品名"
C1FlexGrid1(0, 3) = "予算"
C1FlexGrid1(0, 4) = "実績"
' データの設定
Dim iID As Integer = 0
Dim rm As Random = New Random()
For i As Integer = 0 To 4 - 1
For j As Integer = 0 To 3 - 1
For k As Integer = 0 To 3 - 1
iID += 1
C1FlexGrid1(iID, 1) = "A" & i.ToString()
C1FlexGrid1(iID, 2) = "bb" & j.ToString()
C1FlexGrid1(iID, 3) = rm.[Next](0, 10000)
C1FlexGrid1(iID, 4) = rm.[Next](0, 10000)
Next
Next
Next
' アウトラインツリーの設定
C1FlexGrid1.Tree.Column = 1 '1列目にツリーを設定
C1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf
' 小計の計算
C1FlexGrid1.Subtotal(AggregateEnum.Clear) '既存の小計をクリア
C1FlexGrid1.Sort(SortFlags.Ascending, 1, 2) '列1,列2をソート
'(小計を表示する各列に対してSubtotalメソッドを実行)
For c As Integer = 3 To C1FlexGrid1.Cols.Count - 1
C1FlexGrid1.Subtotal(AggregateEnum.Sum, 0, -1, c, "総売上")
C1FlexGrid1.Subtotal(AggregateEnum.Sum, 1, 1, c, "地域合計 {0}")
C1FlexGrid1.Subtotal(AggregateEnum.Sum, 2, 2, c, "商品小計 {0}")
Next
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// FlexGridの設定
c1FlexGrid1.Rows.Count = 37;
c1FlexGrid1.Cols.Count = 5;
c1FlexGrid1.Cols[2].Format = "c";
c1FlexGrid1.Cols[3].Format = "c";
c1FlexGrid1[0, 1] = "地域";
c1FlexGrid1[0, 2] = "商品名";
c1FlexGrid1[0, 3] = "予算";
c1FlexGrid1[0, 4] = "実績";
// データの設定
int iID = 0;
Random rm = new Random();
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3; k++)
{
iID++;
c1FlexGrid1[iID, 1] = "A" + i.ToString();
c1FlexGrid1[iID, 2] = "bb" + j.ToString();
c1FlexGrid1[iID, 3] = rm.Next(0, 10000);
c1FlexGrid1[iID, 4] = rm.Next(0, 10000);
}
}
}
// アウトラインツリーの設定
c1FlexGrid1.Tree.Column = 1; //1列目にツリーを設定
c1FlexGrid1.Tree.Style = TreeStyleFlags.SimpleLeaf;
// 小計の計算
c1FlexGrid1.Subtotal(AggregateEnum.Clear); //既存の小計をクリア
c1FlexGrid1.Sort(SortFlags.Ascending, 1, 2); //列1,列2をソート
//(小計を表示する各列に対してSubtotalメソッドを実行)
for (int c = 3; c < c1FlexGrid1.Cols.Count; c++)
{
c1FlexGrid1.Subtotal(AggregateEnum.Sum, 0, -1, c, "総売上");
c1FlexGrid1.Subtotal(AggregateEnum.Sum, 1, 1, c, "地域合計 {0}");
c1FlexGrid1.Subtotal(AggregateEnum.Sum, 2, 2, c, "商品小計 {0}");
}
}
}
}