Desenvolvimento - ASP. NET

ASP.NET: TreeView IE WebControl com banco de dados

Este artigo aborda o uso do controle WebControl TreeView que vem junto com o pacote IE WebControl.

por Ramon Durães



Introdução

Estaremos utilizando o controle WebControl TreeView que vem junto com o pacote IE WebControl.
http://download.microsoft.com/download/2/9/0/290e3bc2-a238-447f-ad45-98e590b3048b/TreeViewControl.msi

O exemplo abaixo acessa uma base de dados agrupando o resultado e adicionando ao ListView. O segredo desse componente é adicionar os Nodes. Que são os itens. Então tenha sempre a preocupação de quando adicionar um Node, este Node tem que ser adicionado em um local na arvore.


Figura 1 - TreeView com banco de dados

Insira um webform e adicione um componente TreeView


Figura 2 - Adicionando Treeview

Inserido procedimento Page_Load

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
        If Not Me.Page.IsPostBack Then
            "Procedimento para Carregar Treeview
            Me.CarregaTreeView()
        End If
End Sub

Inserido procedimento para carregar TreeView

"Aqui está o codigo para carregarTreeview 
    Sub CarregaTreeView() 
        Dim strQuery As System.Text.StringBuilder 
        Dim strCategoria As String = "" 
        Dim dtProdutos As DataTable 

        strQuery.Append("select  P.ProductID,ProductName,C.CategoryName ")
	strQuery.Append("from Products P,Categories C ") 
        strQuery.Append("where P.CategoryID=C.CategoryID ") 
        strQuery.Append("order by C.CategoryName,P.ProductName asc ") 
        dtProdutos = Me.ExecutaQuery(strQuery.ToString) 

        TreeView1.Nodes.Clear()   " Limpando Treeview 
        TreeView1.ExpandLevel = 1 " Expandindo 

        Dim Node As New TreeNode  " Inicializando Node 
        Dim i As Int32 = 0 " Variavel para loop 

        "////////////////////////////////////////////////////////////////// 
        "////    Adicionando Node Raiz                                   // 
        "////////////////////////////////////////////////////////////////// 
        Node.ImageUrl = "imagestree/xpMyComp.gif" " Normal
        Node.ExpandedImageUrl = "imagestree/xpMyComp.gif" " Expandido
        Node.Text = "Produtos"
        TreeView1.Nodes.AddAt(0, Node) " Adicionando  

        "////////////////////////////////////////////////////////////////////////////
        "//                     Adicionando nodes                                  //
        "//       O Código abaixo realiza loop pelo DataTable e Agrupa             //
        "//////////////////////////////////////////////////////////////////////////// 

        Try 
            For i = 0 To dtProdutos.Rows.Count - 1 
                If Not strCategoria.Equals(dtProdutos.Rows(i)(2)) Then
                    "Node Pai Produtos
                    strCategoria = Convert.ToString(dtProdutos.Rows(i)(2))
                    Node = New TreeNode
                    Node.ImageUrl = "imagestree/xpPanel.gif" " Image
                    Node.ExpandedImageUrl = "imagestree/xpPanel.gif"
                    Node.Text = strCategoria " Descricao
                    TreeView1.Nodes(0).Nodes.Add(Node) " Adicionando  

                    "Node Produtos_Filho 
                    Node = New TreeNode
                    Node.ImageUrl = "imagestree/person.gif"
                    Node.ExpandedImageUrl = "imagestree/person.gif"
                    Node.Text = Convert.ToString(dtProdutos.Rows(i)(1))
                    Node.NavigateUrl = "produtos.aspx?id=" + _
			Convert.ToString(dtProdutos.Rows(i)(0))
                    Node.Target = "_TOP"
                    TreeView1.Nodes(0).Nodes(TreeView1.Nodes(0).Nodes.Count - 1).Nodes.Add(Node) 
                Else 
                    "Node Produtos_Filho 
                    Node = New TreeNode
                    Node.ImageUrl = "imagestree/person.gif"
                    Node.ExpandedImageUrl = "imagestree/person.gif"
                    Node.Text = Convert.ToString(dtProdutos.Rows(i)(1))
                    Node.NavigateUrl = "produtos.aspx?id=" + _
			Convert.ToString(dtProdutos.Rows(i)(0))
                    Node.Target = "_TOP"
                    TreeView1.Nodes(0).Nodes(TreeView1.Nodes(0).Nodes.Count - 1).Nodes.Add(Node) 
                End If 
            Next 
        Catch ex As Exception
            Response.Write("Falha Treeview " + ex.Message.ToString)
        End Try 
End Sub 

Inserido procedimento para consulta ao banco de dados

"Executa query no banco de dados e retorna DataTable
"Ajustar String de acesso banco de dados de acordo com necessidade 
Private Function ExecutaQuery(ByVal query As String) As DataTable 
    Dim conn As New SqlConnection("Data Source=127.0.0.1; Initial atalog=Northwind;UID=sa;Pwd=") 
    Dim da As New SqlDataAdapter(query, conn)
    Dim dt As New DataTable 

    Try 
	da.Fill(dt)  
    Catch ex As SqlException 
	Response.Write("Erro SQL" + ex.Message.ToString) 
    Catch ex As Exception 
	Response.Write("Erro Geral:" + ex.Message.ToString) 
    Finally 
    	dt.Dispose()
        da.Dispose()
	conn.Dispose() 
    End Try 
	
    Return dt 
End Function

Finalizando

Este é um ótimo componente e colocando boas imagens você conseguirá um bom resultado na sua aplicação. Para fazer download das imagens que utilizei, clique aqui.

O que você gostaria de ver ?

Aguardo seu comentário! Participe!!! Até próximo artigo!

Ramon Durães

Ramon Durães - Especialista em desenvolvimento de software e Microsoft Most Valuable Professional (MVP) em Visual Studio Team System. Realiza treinamentos de .NET Framework em empresas, consultoria em arquitetura de software e implantação de Visual Studio Team System. Palestrante nos principais eventos da Microsoft no Brasil (Tech-Ed 2005, Tech-Ed 2006, Tech-Ed 2007, Tech-Ed 2008, Tech-ED 2009), Microsoft Innovation Days 2007 (Salvador, Brasília, Recife, Goiânia, Natal, Maringá), Microsoft Innovation Days 2009 (Salvador) , Campus Party Brasil 2009 e eventos regionais relacionados a grupos de usuários e universidades. Conhecido autor de artigos para os principais portais de conteúdo e autor de 10 publicações eletrônicas em CD (Video-Aula) pela editora Linha de Código além dos livros "Desenvolvendo para web usando o Visual Studio 2008" e "Gerenciando projetos de software usando Visual Studio Team System" pela editora Brasport. Pode ser encontrado em seu blog http://www.ramonduraes.net e @ramonduraes no Twitter.