hi
It should be a function that can count the number of sub-branches of the tree view on the headers

T
Need code changes. Thank.
Public Class test2
Dim MyDataTable As New DataTable
Dim lstColumns As New List(Of String)
Private Sub test2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Add DataGridView,TreeView1 on Form
MyDataTable.Columns.Add("Group")
MyDataTable.Columns.Add("Type")
MyDataTable.Columns.Add("Size")
MyDataTable.Columns.Add("Location")
MyDataTable.Rows.Add({"CABLE", "MV", "1x240", "Air Building"})
MyDataTable.Rows.Add({"CABLE", "MV", "1x240", "ACC Building"})
MyDataTable.Rows.Add({"CABLE", "LV", "1x240", "Swithgear "})
MyDataTable.Rows.Add({"", "Cable Tray", "20", "Swithgear"})
MyDataTable.Rows.Add({"Install", "Cable Tray", "30", "ACC"})
MyDataTable.Rows.Add({"Install", "Cable Tray", "60", "ACC"})
MyDataTable.Rows.Add({"Install", "JB", "10x10", "Admin"})
MyDataTable.Rows.Add({"Install", "JB", "20x10", "Admin"})
MyDataTable.Rows.Add({"Test", "", "Smoke", "Admin"})
MyDataTable.Rows.Add({"Test", "", "Beam", "ACC"})
MyDataTable.Rows.Add({"Test", "Detector", "Heat", "ACC"})
DataGridView1.DataSource = MyDataTable
DataGridView1.AllowUserToOrderColumns = True
End Sub
Private Sub SetTreeView()
Dim arrTree = (From row In MyDataTable.AsEnumerable()
Select lstColumns.Select(Function(h) row.Item(h)).ToArray).ToArray
For a = 0 To arrTree.Length - 1
Dim parentNode As TreeNode = Nothing
For b = 0 To arrTree(a).Length - 1
Dim value1 = arrTree(a)(b).ToString()
If value1 = "" Then value1 = "Empty Value"
Dim node As TreeNode = Nothing
If parentNode IsNot Nothing Then
node = parentNode.Nodes.Cast(Of TreeNode)() _
.FirstOrDefault(Function(n) n.Text = value1)
Else
node = TreeView1.Nodes.Cast(Of TreeNode)() _
.FirstOrDefault(Function(n) n.Text = value1)
End If
If node IsNot Nothing Then
node.ForeColor = Color.FromArgb(0, 0, 0, 0)
End If
If node Is Nothing Then
node = New TreeNode(value1)
' node.Tag = dynamicColumn(b) & "|" & InDT.Rows(a).Item(DgvFrom.ColumnPrimaryKey)
If parentNode IsNot Nothing Then
parentNode.Nodes.Add(node)
Else
TreeView1.Nodes.Add(node)
End If
End If
parentNode = node
Next
Next
TreeView1.CollapseAll()
End Sub
Private Sub DataGridView1_ColumnDisplayIndexChanged(sender As Object, e As DataGridViewColumnEventArgs) Handles DataGridView1.ColumnDisplayIndexChanged
Dim g As DataGridView = DirectCast(sender, DataGridView)
Dim propertyInfo As Reflection.PropertyInfo = GetType(DataGridViewColumn).GetProperty("DisplayIndexHasChanged", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
If g.Columns.Cast(Of DataGridViewColumn)().Any(Function(x) DirectCast(propertyInfo.GetValue(x), Boolean)) Then
Return
Else
Dim columnTitlesArray() As String = DataGridView1.Columns.Cast(Of DataGridViewColumn)() _
.OrderBy(Function(column) column.DisplayIndex) _
.Select(Function(column) column.HeaderText) _
.ToArray()
TreeView1.Nodes.Clear()
lstColumns.Clear()
For Each columnTitle As String In columnTitlesArray
lstColumns.Add(columnTitle)
' Console.WriteLine(columnTitle)
Next
End If
SetTreeView()
End Sub
End Class