作成日: 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"
' データソースの設定
Dim dt As DataTable = New DataTable("TEST")
dt.Columns.Add("地域", GetType(String))
dt.Columns.Add("商品名", GetType(String))
dt.Columns.Add("予算", GetType(Int32))
dt.Columns.Add("実績", GetType(Int32))
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
dt.Rows.Add("A" & i.ToString(), "bb" & j.ToString(), rm.[Next](0, 10000), rm.[Next](0, 10000))
Next
Next
Next
dt.AcceptChanges()
C1FlexGrid1.DataSource = dt
' アウトラインツリーの設定
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 System.Windows.Forms;
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";
// データソースの設定
DataTable dt = new DataTable("TEST");
dt.Columns.Add("地域", typeof(String));
dt.Columns.Add("商品名", typeof(String));
dt.Columns.Add("予算", typeof(Int32));
dt.Columns.Add("実績", typeof(Int32));
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++;
dt.Rows.Add("A" + i.ToString(), "bb" + j.ToString(), rm.Next(0, 10000), rm.Next(0, 10000));
}
}
}
dt.AcceptChanges();
c1FlexGrid1.DataSource = dt;
// アウトラインツリーの設定
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}");
}
}
}
}