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

これを行うには、GroupDescriptionsクラスのPropertyNameプロパティで、グループ化する列名を指定します※。これにより、同じ値を持つデータが集められ、ノード行(*)が追加された階層構造が自動生成され、ツリー表示されます。
※非連結モードの場合、明示的に列名を設定しておく必要があります。
例)c1FlexGrid1.Cols[1].Name = "地域";
ただし、該当列のデータを事前にソートしておく必要はありません。
* ノード行については、こちらのナレッジをご参照ください。
なお、グループ化しただけでは集計計算は行われません。SubTotalメソッドを使用して、明示的に計算コードを設定してください。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
これを行うには、GroupDescriptionsクラスのPropertyNameプロパティで、グループ化する列名を指定します※。これにより、同じ値を持つデータが集められ、ノード行(*)が追加された階層構造が自動生成され、ツリー表示されます。
※非連結モードの場合、明示的に列名を設定しておく必要があります。
例)c1FlexGrid1.Cols[1].Name = "地域";
ただし、該当列のデータを事前にソートしておく必要はありません。
* ノード行については、こちらのナレッジをご参照ください。
なお、グループ化しただけでは集計計算は行われません。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"
C1FlexGrid1(0, 1) = "地域"
C1FlexGrid1(0, 2) = "商品名"
C1FlexGrid1(0, 3) = "予算"
C1FlexGrid1(0, 4) = "実績"
C1FlexGrid1.Cols(1).Name = "地域" 'グループ化する列名の設定
' データの設定
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
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";
c1FlexGrid1[0, 1] = "地域";
c1FlexGrid1[0, 2] = "商品名";
c1FlexGrid1[0, 3] = "予算";
c1FlexGrid1[0, 4] = "実績";
c1FlexGrid1.Cols[1].Name = "地域"; //グループ化する列名の設定
// データの設定
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);
}
}
}
}
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}");
}
}
}
}