Busca recursiva para preenchimento de uma TreeView

.NET

01/09/2012

Olá pessoal,

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

Hugo

Curtidas 0

Respostas

Edson Oliveira

Edson Oliveira

01/09/2012

Hugo se vc conseguiu preencher um objeto por exemplo o TreeNode, ai é so usar esse método para retornar o JSON.

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.
GOSTEI 0
Hugo

Hugo

01/09/2012

Hugo se vc conseguiu preencher um objeto por exemplo o TreeNode, ai é so usar esse método para retornar o JSON.

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
GOSTEI 0
Edson Oliveira

Edson Oliveira

01/09/2012

Acho que isso pode ajudar vc.

    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":{
}
}
]
}
]
}
GOSTEI 0
Hugo

Hugo

01/09/2012

Acho que isso pode ajudar vc.

    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
GOSTEI 0
Edson Oliveira

Edson Oliveira

01/09/2012

Hugo não teria problema em ensinar essa coisas, mas eu não tenho muito tempo.
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
GOSTEI 0
Hugo

Hugo

01/09/2012

Hugo não teria problema em ensinar essa coisas, mas eu não tenho muito tempo.
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
GOSTEI 0
Hugo

Hugo

01/09/2012

Hugo não teria problema em ensinar essa coisas, mas eu não tenho muito tempo.
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
GOSTEI 0
POSTAR