Webly: [ASP.NET] Carregar e buscar na treeview - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de .NET.

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.


Página 1 de 1

[ASP.NET] Carregar e buscar na treeview carregando e buscando com recursividade em treeview Avaliar tópico: ***** 2 Votos

#1 Membro offline   eriva_br Ícone

  • Erivelton Rosante
  • Ícone
  • Grupo: Moderadores
  • Posts: 463
  • Cadastrado: 09-julho 06
  • Localização:São Paulo - SP
  • Interesses:Desenvolvimento de sistemas e banco de dados <br />

Postou 30 abril 2007 - 12:45

Carregando uma TreeView e realizando uma busca utilizando recursividade:
(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>&nbsp; &nbsp;&nbsp;
		   <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
Imagem





AUTOR: "eriva_br"

Dúvidas, criticas, contribuições, correções e adições seram bem vindas.
-----------------------------------------------------------------------------------------------------------
Funcionou, ótimo, volte e avise, com isso você estara contribuindo com toda a comunidade.
-----------------------------------------------------------------------------------------------------------
0

#2 Membro offline   Paulo Lima Jr. Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 54
  • Cadastrado: 27-outubro 06
  • Localização:Goiânia / GO

Postou 09 junho 2007 - 12:05

Sempre mandando muito bem hein Eriva, cara demais esse esquema.
Paulo Lima
0

#3 Membro offline   eriva_br Ícone

  • Erivelton Rosante
  • Ícone
  • Grupo: Moderadores
  • Posts: 463
  • Cadastrado: 09-julho 06
  • Localização:São Paulo - SP
  • Interesses:Desenvolvimento de sistemas e banco de dados <br />

Postou 14 junho 2007 - 11:39

Ver postPaulo Lima Jr., em 09/06/2007 - 12:05, disse:

Sempre mandando muito bem hein Eriva, cara demais esse esquema.

valew Paulo, eh nóis :drinks:

abs :joia:
-----------------------------------------------------------------------------------------------------------
Funcionou, ótimo, volte e avise, com isso você estara contribuindo com toda a comunidade.
-----------------------------------------------------------------------------------------------------------
0

#4 Membro offline   ErikDraven Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 1
  • Cadastrado: 29-junho 07

Ícone  Postou 29 junho 2007 - 10:23

Cara,

Parabéns pelo tópico. Estava procurando um bom exemplo como o seu, para usar o treeview.

Me inscrevi no fórum só para parabenizá-lo !!!

Obrigado pela grande ajuda que você me deu.

Abraços a você e a todos que lerem este seu tópico.
0

#5 Membro offline   eriva_br Ícone

  • Erivelton Rosante
  • Ícone
  • Grupo: Moderadores
  • Posts: 463
  • Cadastrado: 09-julho 06
  • Localização:São Paulo - SP
  • Interesses:Desenvolvimento de sistemas e banco de dados <br />

Postou 02 julho 2007 - 11:15

Ver postErikDraven, em 29/06/2007 - 10:23, disse:

Cara,

Parabéns pelo tópico. Estava procurando um bom exemplo como o seu, para usar o treeview.

Me inscrevi no fórum só para parabenizá-lo !!!

Obrigado pela grande ajuda que você me deu.

Abraços a você e a todos que lerem este seu tópico.

valew, abs :cheers:
-----------------------------------------------------------------------------------------------------------
Funcionou, ótimo, volte e avise, com isso você estara contribuindo com toda a comunidade.
-----------------------------------------------------------------------------------------------------------
0

Página 1 de 1


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)