Busca recursiva para preenchimento de uma TreeView
01/09/2012
0
Trabalho com o Visual Studio 2010, c#, Asp.net MVC 3, Sql server e Razor.
Algum colega poderia me ajudar a criar um método no meu controller (que buscará dados na tabela do banco de dados), que retornará um JSON nesse modelo:
"{
children: [
{
text:'Cadastros',
expanded: true,
children:[
{
text:'Pessoas',
leaf: true,
itemMenu: 'pessoaList'
},
{
text:'Cadastro 2',
leaf:true,
itemMenu: '2List'
}
]
}
,
{
text:'Relatórios',
expanded: true,
children:[
{
text:'Relatório de pessoas',
leaf:true,
itemMenu: 'relatorioPessoas'
}
]
}
]
}"
Ficarei muito grato se alguém puder me ajudar
Abraços
Hugo
Posts
04/09/2012
Edson Oliveira
TreeNode oTreeNode = new TreeNode(); new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(oTreeNode);
Só toma cuidado com uma coisa, se um nó filho tiver uma instancia de um nó pai, isso pode causar ciclo infinito,
mas senão vai funcionar sem problemas.
Se tiver dificuldade para preencher o objeto manda ai como vc está retornando do banco de dados.
04/09/2012
Hugo
TreeNode oTreeNode = new TreeNode(); new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(oTreeNode);
Só toma cuidado com uma coisa, se um nó filho tiver uma instancia de um nó pai, isso pode causar ciclo infinito,
mas senão vai funcionar sem problemas.
Se tiver dificuldade para preencher o objeto manda ai como vc está retornando do banco de dados.
Boa tarde Edson,
Muito obrigado por responder ao meu post.
A minha dificuldade está somente em criar o método que retornará o JSON, ou seja, a minha base de dados contém o seguintes campos:
Id
Text
Item
ParenteId
Eu não estou conseguindo fazer o método me retornar os dados do JSON no post acima. Você poderia me ajudar?
Abraços
04/09/2012
Edson Oliveira
public class Tree { public int Id { get; set; } public string Text { get; set; } public object Item { get; set; } public int ParenteId { get; set; } public List<Tree> Nodes { get; set; } public Tree AddNode(int id, string text, object item) { Tree oTree = new Tree(); oTree.Id = id; oTree.Text = text; oTree.Item = item; oTree.ParenteId = this.Id; oTree.Nodes = new List<Tree>(); if (this.Nodes == null) { this.Nodes = new List<Tree>(); } this.Nodes.Add(oTree); return oTree; } }
Tree oTree = new Tree(); oTree.Id = 1; oTree.Text = "Texto 1"; oTree.Item = "Texto_1"; oTree.ParenteId = -1; oTree.AddNode(2, "Texto_2", "Texto 2"); oTree.AddNode(3, "Texto_3", "Texto 3"); oTree.AddNode(4, "Texto_4", "Texto 4"); Tree nodeChild5 = oTree.AddNode(5, "Texto_5", "Texto 5"); nodeChild5.AddNode(6, "Texto_6", "Texto 6"); nodeChild5.AddNode(7, "Texto_7", "Texto 7"); nodeChild5.AddNode(8, "Texto_8", "Texto 8"); string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(oTree);
Resultado
{ "Id":1, "Text":"Texto 1", "Item":"Texto_1", "ParenteId":-1, "Nodes":[ { "Id":2, "Text":"Texto_2", "Item":"Texto 2", "ParenteId":1, "Nodes":{ } }, { "Id":3, "Text":"Texto_3", "Item":"Texto 3", "ParenteId":1, "Nodes":{ } }, { "Id":4, "Text":"Texto_4", "Item":"Texto 4", "ParenteId":1, "Nodes":{ } }, { "Id":5, "Text":"Texto_5", "Item":"Texto 5", "ParenteId":1, "Nodes":[ { "Id":6, "Text":"Texto_6", "Item":"Texto 6", "ParenteId":5, "Nodes":{ } }, { "Id":7, "Text":"Texto_7", "Item":"Texto 7", "ParenteId":5, "Nodes":{ } }, { "Id":8, "Text":"Texto_8", "Item":"Texto 8", "ParenteId":5, "Nodes":{ } } ] } ] }
04/09/2012
Hugo
public class Tree { public int Id { get; set; } public string Text { get; set; } public object Item { get; set; } public int ParenteId { get; set; } public List<Tree> Nodes { get; set; } public Tree AddNode(int id, string text, object item) { Tree oTree = new Tree(); oTree.Id = id; oTree.Text = text; oTree.Item = item; oTree.ParenteId = this.Id; oTree.Nodes = new List<Tree>(); if (this.Nodes == null) { this.Nodes = new List<Tree>(); } this.Nodes.Add(oTree); return oTree; } }
Tree oTree = new Tree(); oTree.Id = 1; oTree.Text = "Texto 1"; oTree.Item = "Texto_1"; oTree.ParenteId = -1; oTree.AddNode(2, "Texto_2", "Texto 2"); oTree.AddNode(3, "Texto_3", "Texto 3"); oTree.AddNode(4, "Texto_4", "Texto 4"); Tree nodeChild5 = oTree.AddNode(5, "Texto_5", "Texto 5"); nodeChild5.AddNode(6, "Texto_6", "Texto 6"); nodeChild5.AddNode(7, "Texto_7", "Texto 7"); nodeChild5.AddNode(8, "Texto_8", "Texto 8"); string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(oTree);
Resultado
{ "Id":1, "Text":"Texto 1", "Item":"Texto_1", "ParenteId":-1, "Nodes":[ { "Id":2, "Text":"Texto_2", "Item":"Texto 2", "ParenteId":1, "Nodes":{ } }, { "Id":3, "Text":"Texto_3", "Item":"Texto 3", "ParenteId":1, "Nodes":{ } }, { "Id":4, "Text":"Texto_4", "Item":"Texto 4", "ParenteId":1, "Nodes":{ } }, { "Id":5, "Text":"Texto_5", "Item":"Texto 5", "ParenteId":1, "Nodes":[ { "Id":6, "Text":"Texto_6", "Item":"Texto 6", "ParenteId":5, "Nodes":{ } }, { "Id":7, "Text":"Texto_7", "Item":"Texto 7", "ParenteId":5, "Nodes":{ } }, { "Id":8, "Text":"Texto_8", "Item":"Texto 8", "ParenteId":5, "Nodes":{ } } ] } ] }
Boa noite Edson,
Nem sei com te agradecer, o método funcionou tranquilo.
Olha, já a algum tempo estou desempregado e procurando retornar ao mercado. Para isso eu iniciei os meus estudos em .NET.
Hoje eu trabalho com as seguintes ferramentas:
Visual Studio 2010
Entity Framework 4.3.1
JQuery
SQL Server 2008
Razor
Asp.net
Linq
C#
Se você tiver interesse, eu necessito aprender os seguintes itens:
criar relatórios em Crystal Reports e vincula-los na minha aplicação .NET;
saber utilizar o Ofuscator do .NET;
saber compactar CSS e JavaScript para que a aplicação fique mais leve;
aprender a publicar minha aplicação em um host externo e também em uma intranet;
Estou disposto a pagar por estes cursinhos e, se você tiver interesse e se orçamento encaixar em minha planilha de custos, a gente poderia fechar um acordo, o que você acha?
Abraços
04/09/2012
Edson Oliveira
Tenho um colega que trabalho com Dot.net, conversa com ele, ele disse que só em setembro que ele está ocupado, depois disso acho que ele tem tempo.
Nome dele é Marcelo.
mcgchaves@gmail.com
08/09/2012
Hugo
Tenho um colega que trabalho com Dot.net, conversa com ele, ele disse que só em setembro que ele está ocupado, depois disso acho que ele tem tempo.
Nome dele é Marcelo.
mcgchaves@gmail.com
Olá Edson, desculpe-me pela demora em lhe responder.
Muito obrigado pela dica, entrarei em contato com o Marcelo.
Deus lhe abençoe.
Abraços
14/09/2012
Hugo
Tenho um colega que trabalho com Dot.net, conversa com ele, ele disse que só em setembro que ele está ocupado, depois disso acho que ele tem tempo.
Nome dele é Marcelo.
mcgchaves@gmail.com
Olá Edson tudo na paz?!
Meu amigo, eu enviei um e-mail para o seu colega já faz alguns dias, mas ele não me respondeu.
Você teria outra pessoa para me indicar?
Abraços
Clique aqui para fazer login e interagir na Comunidade :)