Criando TreeView com Banco de Dados (parte 2) Essa segunda parte do TreeView foi feito com banco de dados SQL SERVER. O Visual Studio.NET 2005 é bem fácil e simples de criar um menu TreeView com valores do banco de dados. O nome do banco de dados é Northwind, ou seja, todo SQL SERVER instalado no servidor ou máquina já vem com esse banco padrão. Nesse artigo, não irei fazer OO (orientado a objetos), o código será todo dentro da página treeView.aspx. No próximo artigo, parte 3, refatorarei o código colocando da forma OO. O primeiro de tudo, devo colocar o código do objeto na parte de html, ou apenas arrastar da toolbox o objeto treeview. Segue o código: <asp:TreeView ID="Tree" runat="server" ExpandDepth=0 OnSelectedNodeChanged="SelectedNodeChanged"> </asp:TreeView> A ilustração do objeto acima está nas próximas figuras 1.1 e 1.2. Referência: 1.1 Referência: 1.2 No começo do código, criei uma constante chamada conectionString armazenando o a linha de conexão do banco de dados. ///classe de importação para usar banco de dados using System.Data.SqlClient; ///constante com variável de conexão com o banco de dados const string connectionString = "Server=localhost;Integrated Security=True;Database=Northwind"; Veja a figura de referência 1.3. Referência: 1.3 O próximo código abaixo será chamado no load da página. Criei um método protegido e que não volta nada. Segue o mesmo. ///método que popula o treeview protected void Popula() { DataSet dst = TreeViewData(); foreach (DataRow masterRow in dst.Tables["Categories"].Rows) { TreeNode masterNode = new TreeNode((string)masterRow["CategoryName"]); Tree.Nodes.Add(masterNode); foreach (DataRow childRow in masterRow.GetChildRows("Children")) { TreeNode childNode = new TreeNode(); childNode.Text = childRow["ProductName"].ToString(); childNode.Value = childRow["ProductID"].ToString(); masterNode.ChildNodes.Add(childNode); } } } A linha de código que está pintada de amarela é outro método que criei que retorna um objeto dataset. Veja o mesmo abaixo: protected DataSet TreeViewData() { SqlConnection con = new SqlConnection(connectionString); SqlDataAdapter dadCats = new SqlDataAdapter("SELECT * FROM Categories", con); SqlDataAdapter dadProducts = new SqlDataAdapter("SELECT * FROM Products", con); DataSet dst = new DataSet(); dadCats.Fill(dst, "Categories"); dadProducts.Fill(dst, "Products"); dst.Relations.Add("Children", dst.Tables["Categories"].Columns["CategoryID"], dst.Tables["Products"].Columns["CategoryID"]); return dst; } O código acima treeViewData() retorna para quem chamou um objeto dataset. Dentro do bloco do código, conecto no banco de dados, crio um select que é uma instrução PSSQL, passando a minha variável con criada anteriormente. O mesmo retorna um dataAdapter com o nome dadCats que é da tabela de categoria. Na linha abaixo, crio um outro select para retornar outro objeto dataAdapter. Seguindo o código, preencho os objetos dataSet, relaciono os valores e retorno o dataSet. O método Popula(), tenho que fazer dois foreach para relacionar o pai com seus filhos e mostrar no treeView. Primeiro monto um node (nó), com um nome da categoria e depois monto os filhos do mesmo nó. Depois apenas preencho o treeView com o text e o value adicionando-os. A linha abaixo explica preenchendo o text e o value. TreeNode childNode = new TreeNode(); childNode.Text = childRow["ProductName"].ToString(); childNode.Value = childRow["ProductID"].ToString(); masterNode.ChildNodes.Add(childNode); A linha em amarelo acima mostra adicionando os nós no treeView. Veja o mesmo em funcionamento. Não esqueça de iniciar o SQL SERVER. Set como a página de inicialização e clique F5. A figura 1.4 mostra a ilustração do funcionamento. Referência: 1.4 Ainda não acabou e voltando ao código do treeView, na parte de html veja que existe uma tag diferente. OnSelectedNodeChanged="SelectedNodeChanged"> Esse SelectedNodeChanged é um método que criei para quando o usuário clicar em um link ou linha do treeView, o mesmo será redirecionado passando alguns valores. Veja o código abaixo: protected void SelectedNodeChanged(object sender, EventArgs e) { Response.Redirect("rss.aspx?no=" + this.Tree.SelectedValue.ToString() + "&de=" + this.Tree.SelectedNode.Text); } Desde já agradeço a todos e espero ter ajudado. Mauricio Júnior [email protected] [email protected]