tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: TREEVIEW の使い方
投稿日: 2009/12/01(Tue) 15:42
投稿者魔界の仮面弁士
今回のデータとは管理方法が異なりますが、このような実装パターンもあります。


#Region "親IDにて管理される場合"
    Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
        Dim tbl As DataTable = GetSample2()
        Dim nodes As Dictionary(Of Integer, TreeNode) = ToDictionary(tbl.Rows)
        Dim rootNodes As TreeNodeCollection = TreeView1.Nodes
        For Each item As KeyValuePair(Of Integer, TreeNode) In nodes
            Dim parentNodes As TreeNodeCollection
            Dim parentID As Integer = CInt(item.Value.Tag("親"))
            If nodes.ContainsKey(parentID) Then
                parentNodes = nodes(parentID).Nodes
            Else
                parentNodes = rootNodes
            End If
            parentNodes.Add(item.Value)
        Next
        TreeView1.ExpandAll()
    End Sub

    Private Function ToDictionary(ByVal rows As DataRowCollection) As Dictionary(Of Integer, TreeNode)
        Dim nodes As New Dictionary(Of Integer, TreeNode)
        For Each row As DataRow In rows
            Dim node As New TreeNode(row("名").ToString())
            node.Tag = row
            nodes.Add(CInt(row("ID")), node)
        Next
        Return nodes
    End Function

    Private Function GetSample2() As DataTable
        Dim tbl As New DataTable
        tbl.Columns.Add("ID", GetType(Integer))
        tbl.Columns.Add("親", GetType(Integer))
        tbl.Columns.Add("名", GetType(String))
        tbl.PrimaryKey = New DataColumn() {tbl.Columns("ID")}

        tbl.Rows.Add(7, 0, "製品B")     '製品B
        tbl.Rows.Add(8, 7, "中間1")     '┣中間1
        tbl.Rows.Add(9, 8, "部品1")     '┃┗部品1
        tbl.Rows.Add(10, 7, "中間3")    '┗中間3
        tbl.Rows.Add(11, 10, "部品4")   ' ┣部品4
        tbl.Rows.Add(12, 10, "部品5")   ' ┗部品5
        tbl.Rows.Add(13, 12, "部品x")   '  ┣部品x
        tbl.Rows.Add(14, 12, "部品y")   '  ┗部品y

        Return tbl
    End Function
#End Region


こちらも、データ内容の整合性に注意してください。
第IDが自分の子孫ノードになっていた場合や、存在しないIDが
指定されていた場合、正しく展開できません。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。