VB.NET: Utilizando o controlo Treeview
O controlo Treeview permite mostrar diversos nodes (nós) hierarquicamente, como acontece com o explorador do sistema operativo, e com isso permitir ao utilizador uma forma simples de visualizar ou seleccionar qualquer node.
Para adicionar nodes a uma Treeview, pode-se fazer em design time (utilizando o wizard) ou em run-time (utilizando código). Um exemplo simples de adicionar alguns nodes usando código é o seguinte:
Dim node1 As TreeNode = Me.TreeView1.Nodes.Add("Fruta")
node1.Nodes.Add("Laranja")
node1.Nodes.Add("Maça")
node1.Nodes.Add("Pessego")
Dim node2 As TreeNode = Me.TreeView1.Nodes.Add("Bebidas")
node2.Nodes.Add("Whiskey")
node2.Nodes.Add("Moscatel")
node2.Nodes.Add("Vodka")
Isto irá adicionar dois nodes principais (“Fruta” e “Bebidas”), e dentro desses nodes, outros subnodes (designado por child nodes). O resultado será o seguinte:
Mas quando se tem mais informação, não se pode inserir todos os nodes desta forma. É preciso guarda a informação em uma base de dados, ou em outro recurso qualquer, sendo necessário primeiro definir uma estrutura que seja adequada.

Este exemplo de estrutura é a forma mais usada e mais prática de o fazer. Um campo “ID” que é a chave-primária e com auto-numeração (Identity), uma campo designado como “dependencia” que irá fazer referência ao “ID” que queremos, e, finalmente, uma campo para a descrição.
Como se pode ver nos dados, os campos que vão aparecer na raiz têm no campo “dependencia” um 0 (zero). Os outros fazem referência ao ID base.
Mas podemos criar mais níveis hierárquicos na árvore, bastando para isso fazer referência a um “ID” qualquer e esse registo será um child node do ID indicado. Neste caso iremos adicionar algumas marcas de Whiskey.
Para finalizar o código!
É fundamental criar um método recursivo, que irá percorrer todos os itens na lista, e preencher a Treeview.
Eis um exemplo de como se pode fazer:
Private Const connString As String = _
"Data Source=.\SQLEXPRESS;AttachDbFilename='C:\myDB.mdf';" & _
"Integrated Security=True;User Instance=True"
''' <summary>
''' Preenche recursivamente uma Treeview com
''' informação de uma base de dados SQL
''' </summary>
''' <param name="dependenciaID">ID do node base</param>
''' <param name="childNode">Node anterior</param>
Sub FillTreeViewNodes(ByVal dependenciaID As Integer, ByVal childNode As TreeNode)
Try
Dim SQL As String = _
"SELECT * FROM produtos WHERE dependencia=@id ORDER BY descricao;"
' Ligação à base de dados (SQL)
Using conn As New SqlConnection(connString)
conn.Open()
' Define o comando e o parameter
Using command As New SqlCommand(SQL, conn)
command.Parameters.Add("@id", SqlDbType.Int).Value = dependenciaID
' Lê os dados para um SqlDataReader
Using reader As SqlDataReader = command.ExecuteReader()
' Caso tenha resultados
If reader.HasRows Then
While reader.Read()
Dim newNode As TreeNode = Nothing
Dim desc As String = reader.Item("descricao").ToString()
Dim actualID As Integer = Integer.Parse(reader.Item("ID").ToString())
' Verifica se é o primeiro node
If childNode Is Nothing Then
newNode = New TreeNode(desc)
Me.TreeView1.Nodes.Add(newNode)
Else
newNode = childNode.Nodes.Add(desc)
End If
' Chama recursivamente o método com o ID actual
Call FillTreeViewNodes(actualID, newNode)
End While
End If
End Using 'reader
End Using 'command
End Using 'conn
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
Finalmente, para chamar o método criado:
' Preenche a Treeview, iniciando nos nodes da raiz
Call FillTreeViewNodes(0, Nothing)
E este será o resultado:
Este artigo pretende mostrar de uma forma simples como preencher uma Treeview, através de uma função recursiva, e como criar uma estrutura numa base de dados para guardar a informação.
Espero que ajude!