作成日: 2023/02/24 最終更新日: 2023/02/24
文書種別
使用方法
詳細
C1FlexGridのGroupDescriptionsクラスを使用して、グリッドをグループ化することで、簡単な階層構造を作成し、ツリー表示することができます。

これを行うには、GroupDescriptionsクラスのPropertyNameプロパティで、グループ化するデータソースの列名を指定します。これにより、同じ値を持つデータが集められ、ノード行(*)が追加された階層構造が自動生成され、ツリー表示されます。
※該当列のデータを事前にソートしておく必要はありません。
* ノード行については、こちらのナレッジをご参照ください。
なお、グループ化しただけでは集計計算は行われません。SubTotalメソッドを使用して、明示的に計算コードを設定してください。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
これを行うには、GroupDescriptionsクラスのPropertyNameプロパティで、グループ化するデータソースの列名を指定します。これにより、同じ値を持つデータが集められ、ノード行(*)が追加された階層構造が自動生成され、ツリー表示されます。
※該当列のデータを事前にソートしておく必要はありません。
* ノード行については、こちらのナレッジをご参照ください。
なお、グループ化しただけでは集計計算は行われません。SubTotalメソッドを使用して、明示的に計算コードを設定してください。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
Imports System.ComponentModel
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
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' "地域"列でグループ作成
Dim grps As List(Of C1.Win.C1FlexGrid.GroupDescription) = New List(Of C1.Win.C1FlexGrid.GroupDescription)()
Dim grp As C1.Win.C1FlexGrid.GroupDescription = New C1.Win.C1FlexGrid.GroupDescription("地域", ListSortDirection.Descending, True)
grps.Add(grp)
' 上記グループに従ってFlexGridをグループ化
C1FlexGrid1.GroupDescriptions = grps
' 小計を表示する各列に対してSubtotalメソッドを実行
For c As Integer = 3 To C1FlexGrid1.Cols.Count - 1
C1FlexGrid1.Subtotal(AggregateEnum.Sum, 0, 1, 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";
// データの設定
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;
}
private void button1_Click(object sender, EventArgs e)
{
// "地域"列でグループ作成
List grps = new List();
C1.Win.C1FlexGrid.GroupDescription grp = new C1.Win.C1FlexGrid.GroupDescription("地域", ListSortDirection.Descending, true);
grps.Add(grp);
//上記グループに従ってFlexGridをグループ化
c1FlexGrid1.GroupDescriptions = grps;
// 小計を表示する各列に対してSubtotalメソッドを実行
for (int c = 3; c < c1FlexGrid1.Cols.Count; c++)
{
c1FlexGrid1.Subtotal(AggregateEnum.Sum, 0, 1, c, "地域合計 {0}");
}
}
}
}