タイトル | : Re^2: TREEVIEW の使い方 |
記事No | : 9658 |
投稿日 | : 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が 指定されていた場合、正しく展開できません。
|