作成日: 2023/02/16 最終更新日: 2023/02/16
文書種別
使用方法
詳細
非連結グリッドでは、IsNodeプロパティを用いて任意の行をノード行(*)に変更して階層構造を作成し、これをツリー表示することができます。
※この方法は、非連結モードでのみ機能することに注意してください。連結モードで行をノードに変更しようとすると、例外が発生します。連結グリッドではRows.InsertNodeメソッドを使用してノード行を追加してください。

* ノード行については、こちらのナレッジをご参照ください。
最初に、行のIsNodeプロパティを用いて任意の行をノード行に変更し、同時にNode.Levelプロパティでアウトラインレベルを指定します。
次に、C1FlexGridのTree.Columnプロパティを用いてツリーが表示される列を指定し、Tree.StyleをSimpleLeafに設定します。
なお、MouseDownイベントでHitTestメソッドと行のDataIndexプロパティを使用すると、行の任意の場所をクリックした時に、ノードを除いた何番目の行であるかを参照することができます。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
※この方法は、非連結モードでのみ機能することに注意してください。連結モードで行をノードに変更しようとすると、例外が発生します。連結グリッドではRows.InsertNodeメソッドを使用してノード行を追加してください。
* ノード行については、こちらのナレッジをご参照ください。
最初に、行のIsNodeプロパティを用いて任意の行をノード行に変更し、同時にNode.Levelプロパティでアウトラインレベルを指定します。
次に、C1FlexGridのTree.Columnプロパティを用いてツリーが表示される列を指定し、Tree.StyleをSimpleLeafに設定します。
なお、MouseDownイベントでHitTestメソッドと行のDataIndexプロパティを使用すると、行の任意の場所をクリックした時に、ノードを除いた何番目の行であるかを参照することができます。
以下に、簡単な設定コードを記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの設定
C1FlexGrid1.Cols.Fixed = 0
C1FlexGrid1.Rows.Count = 10
C1FlexGrid1.Cols.Count = 4
C1FlexGrid1(1, 0) = "階層レベル0"
C1FlexGrid1(2, 0) = "A1"
C1FlexGrid1(3, 0) = "A2"
C1FlexGrid1(4, 0) = "階層レベル1"
C1FlexGrid1(5, 0) = "B1"
C1FlexGrid1(6, 0) = "B2"
C1FlexGrid1(7, 0) = "階層レベル2"
C1FlexGrid1(8, 0) = "C1"
C1FlexGrid1(9, 0) = "C2"
' 通常行をノード行に変更
C1FlexGrid1.Rows(1).IsNode = True
C1FlexGrid1.Rows(1).Node.Level = 0
C1FlexGrid1.Rows(4).IsNode = True
C1FlexGrid1.Rows(4).Node.Level = 1
C1FlexGrid1.Rows(7).IsNode = True
C1FlexGrid1.Rows(7).Node.Level = 2
C1FlexGrid1.AutoSizeCol(0)
' アウトラインツリーの設定
C1FlexGrid1.Tree.Column = 0
C1FlexGrid1.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf
End Sub
Private Sub C1FlexGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles C1FlexGrid1.MouseDown
If C1FlexGrid1.HitTest().Type = HitTestTypeEnum.Cell Then
Dim idxRow As Integer = C1FlexGrid1.MouseRow
Dim idxCol As Integer = C1FlexGrid1.MouseCol
If idxRow < C1FlexGrid1.Rows.Fixed OrElse idxCol <> 0 OrElse
C1FlexGrid1.Rows(idxRow).IsNode = False Then
Dim i As Integer = C1FlexGrid1.Rows(idxRow).DataIndex + 1
Me.Text = "ノード行を除く行番号=" + i.ToString() + ", データ=" + C1FlexGrid1(idxRow, 0)
Else
Me.Text = "データ行ではありません。"
End If
End If
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)
{
// データの設定
c1FlexGrid1.Cols.Fixed = 0;
c1FlexGrid1.Rows.Count = 10;
c1FlexGrid1.Cols.Count = 4;
c1FlexGrid1[1, 0] = "階層レベル0";
c1FlexGrid1[2, 0] = "A1";
c1FlexGrid1[3, 0] = "A2";
c1FlexGrid1[4, 0] = "階層レベル1";
c1FlexGrid1[5, 0] = "B1";
c1FlexGrid1[6, 0] = "B2";
c1FlexGrid1[7, 0] = "階層レベル2";
c1FlexGrid1[8, 0] = "C1";
c1FlexGrid1[9, 0] = "C2";
// 通常行をノード行に変更
c1FlexGrid1.Rows[1].IsNode = true;
c1FlexGrid1.Rows[1].Node.Level = 0;
c1FlexGrid1.Rows[4].IsNode = true;
c1FlexGrid1.Rows[4].Node.Level = 1;
c1FlexGrid1.Rows[7].IsNode = true;
c1FlexGrid1.Rows[7].Node.Level = 2;
c1FlexGrid1.AutoSizeCol(0);
// アウトラインツリーの設定
c1FlexGrid1.Tree.Column = 0;
c1FlexGrid1.Tree.Style = C1.Win.C1FlexGrid.TreeStyleFlags.SimpleLeaf;
}
private void c1FlexGrid1_MouseDown(object sender, MouseEventArgs e)
{
if ((c1FlexGrid1.HitTest().Type == HitTestTypeEnum.Cell))
{
int idxRow = c1FlexGrid1.MouseRow;
int idxCol = c1FlexGrid1.MouseCol;
if ((idxRow < c1FlexGrid1.Rows.Fixed) || (idxCol != 0)
|| (c1FlexGrid1.Rows[idxRow].IsNode == false))
{
int i = (c1FlexGrid1.Rows[idxRow].DataIndex + 1);
this.Text = "ノード行を除く行番号=" + i.ToString() + ", データ=" + c1FlexGrid1[idxRow, 0];
}
else
{
this.Text = "データ行ではありません。";
}
}
}
}
}