(código comentado)
desenvolvido em Visual Studio 2005, utilizando a linguagem C#, com banco de dados SQL Server 2000
Crie um novo projeto web no VS 2005, vamos utilizar a página criada por padrão pelo VS Default.aspx
Será utilizado o banco de exemplo northwind, usando as tabelas Categories e Products relacionando pela coluna CategoryID, o relacionamento faremos com o dataset, desta forma serão carregados 2 niveis na treeview:
1º Nivel - Categorias
2º Nivel - Produtos
código HTML para a página Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>TreeView</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TreeView ID="Tree" runat="server" ExpandDepth="0" onselectedNodeChanged="SelectedNodeChanged"> </asp:TreeView> <asp:TextBox ID="TextBox1" runat="server" Style="z-index: 109; left: 548px; position: absolute; top: 55px"></asp:TextBox> <asp:Button ID="btnBusca" runat="server" Text="Busca" Style="z-index: 109; left: 481px; position: absolute; top: 54px" onclick="btnBusca_Click"/> </div> </form> </body> </html>
códigos para o arquivo CS, Default.aspx.cs:
Namespaces:
using System; using System.Data; using System.Web; using System.Web.UI.WebControls; using System.Data.SqlClient;
código para o evento Page_Load, aqui será feito a conexão com o Banco de Dados e será carregado o treeview
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//habilitando checkbox para o treeview
Tree.ShowCheckBoxes = TreeNodeTypes.All;
//definindo string de conexão com o banco de dados SQL Server
string cnnStr = "data source=localhost; USER ID=sa; Password=; Initial Catalog=northwind";
//criando e instanciando a váriavel de conexão
SqlConnection con = new SqlConnection(cnnStr);
//criando e instanciando SqlDataAdapter de categorias
SqlDataAdapter dadCats = new SqlDataAdapter("SELECT * FROM Categories", con);
//criando e instanciando SqlDataAdapter de Produtos
SqlDataAdapter dadProd = new SqlDataAdapter("SELECT * FROM Products", con);
//criando e instanciando DataSet para armazenar dados
DataSet dst = new DataSet();
//preenchendo DataSet com a tabela de Categorias
dadCats.Fill(dst, "Categories");
//preenchendo DataSet com a tabela de Produtos
dadProd.Fill(dst, "Products");
//Criando relacionamento entre Categoria e Produtos pela coluna CategoryID, para futura busca de dados
dst.Relations.Add("Cat_Prod", dst.Tables["Categories"].Columns["CategoryID"], dst.Tables["Products"].Columns["CategoryID"]);
//CARREGANDO O TREEVIEW
foreach (DataRow masterRow in dst.Tables["Categories"].Rows)
{
//carregando o 1º nivel (pais)
TreeNode masterNode = new TreeNode((string)masterRow["CategoryName"]);
Tree.Nodes.Add(masterNode);
//carregando o 2º nivel (filhos)
foreach (DataRow childRow in masterRow.GetChildRows("Cat_Prod"))
{
TreeNode childNode = new TreeNode();
childNode.Text = childRow["ProductName"].ToString();
childNode.Value = childRow["ProductID"].ToString();
masterNode.ChildNodes.Add(childNode);
}
}
}
}código para o evento Click do botão Procurar, a treeview será totalmente fechada caso estiver algum node aberto e será chamado a rotina de busca
protected void btnBusca_Click(object sender, EventArgs e)
{
//deixa a treeview totalmente fechada
Tree.CollapseAll();
//realiza a busca e caso encontrar expande e marca o checkbox nos itens encontrados
this.Buscar(this.TextBox1.Text.Trim(), Tree.Nodes);
}código que realiza a busca, utilizando a recursividade, entrará em todos os nodes, caso for adicionado mais algum node, esta função já estará preparada, claro devido a esta ser recursiva
private void Buscar(string valorProcurado, TreeNodeCollection treeview)
{
int i = 0;
foreach (TreeNode tre in treeview)
{
//utilizando a recursividade
this.Buscar(valorProcurado, treeview[i].ChildNodes);
//faz a busca por trecho de texto
if (tre.Text.IndexOf(valorProcurado, StringComparison.OrdinalIgnoreCase) > -1)
{
Response.Output.WriteLine("Chave do Item Encontrado:" + tre.Value);
Response.Output.WriteLine("Valor Encontrado:" + tre.Text);
Response.Output.WriteLine("Raiz do Item Encontrado:" + tre.ValuePath);
Response.Output.WriteLine("--------------------------------------------");
//tre.Selected = true; //seleciona o item encontrado
tre.Checked = true; //marca o checkbox do item encontrado
if (tre.Parent == null) //se não tiver parent (caso do 1º nivel)
tre.Expand(); //expande o nivel atual
else
tre.Parent.Expand(); //expande o nivel anterior
}
i++;
}
}código para resposta do Click na treeview (somente para mostrar os dados do item clicado)
protected void SelectedNodeChanged(Object sender, EventArgs e)
{
//mostrando dados do item clicado
Response.Output.Write("REGISTRO SELECIONADO<BR>VALUE: " + this.Tree.SelectedValue.ToString() + "<BR>TEXT: " + this.Tree.SelectedNode.Text);
}Resultado buscando a expressão "MIX", veja que foram encontrados 2 registros em categorias diferentes, estes tiveram seus grupos abertos (expand) e sua checkbox marcada

AUTOR: "eriva_br"
Dúvidas, criticas, contribuições, correções e adições seram bem vindas.

Entrar
Cadastre-se
Ajuda
Responder


Quote
