''' <summary> ''' テーブルからデータをツリーになる処理 ''' </summary> ''' <param name="tbl">データテーブル</param> ''' <param name="nodes">ツリーの親ノード</param> ''' <param name="col">列番</param> ''' <param name="rowS">スタート行番</param> ''' <param name="rowE">ラスト行番</param> ''' <remarks></remarks> Private Sub doTreeNode(ByVal tbl As DataTable, ByRef nodes As TreeNode, ByVal col As Integer, ByVal rowS As Integer, ByVal rowE As Integer) Try Dim strValue As String = "" Dim addRows As Integer = 0 '毎回が循環された行数を記録する変数 Dim firstFlg As Boolean = True Dim childNode As TreeNode = Nothing Dim ii As Integer For ii = rowS To rowE If Not strValue.Equals(tbl.Rows(ii - 1).Item(col)) Then If firstFlg Then '第一回する時ノードを作成する childNode = New TreeNode childNode.SelectAction = TreeNodeSelectAction.None
strValue = tbl.Rows(ii - 1).Item(col).ToString() childNode.Text = strValue
nodes.ChildNodes.Add(childNode)
firstFlg = False Else If nodes.ChildNodes.Count <> 0 And col <> tbl.Columns.Count - 1 Then '次列ノードについてデータを作成する doTreeNode(tbl, nodes.ChildNodes(nodes.ChildNodes.Count - 1), col + 1, ii - addRows, ii - 1)
addRows = 0 'クリアする End If
'当時の親ノードに次ノードを作成する childNode = New TreeNode childNode.SelectAction = TreeNodeSelectAction.None
strValue = tbl.Rows(ii - 1).Item(col).ToString() childNode.Text = strValue
nodes.ChildNodes.Add(childNode) End If Else 'If ii = tbl.Rows.Count And col <> tbl.Columns.Count - 1 Then ' doTreeNode(tbl, nodes.ChildNodes(nodes.ChildNodes.Count - 1), col + 1, ii - addRows, ii) 'End If End If
addRows = addRows + 1 '毎回が循環された行数を記録する Next
'行数がrowEまでに循環した後、もし列数はまだ最後列にならない場合が次列に設定して続きって循環する If col <> tbl.Columns.Count - 1 Then doTreeNode(tbl, nodes.ChildNodes(nodes.ChildNodes.Count - 1), col + 1, ii - addRows, ii - 1) End If Catch ex As Exception Throw ex End Try End Sub