Busca recursiva para preenchimento de uma TreeView

01/09/2012

0

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

Responder

Posts

04/09/2012

Edson Oliveira

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.
Responder

04/09/2012

Hugo

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
Responder

04/09/2012

Edson Oliveira

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":{
}
}
]
}
]
}
Responder

04/09/2012

Hugo

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
Responder

04/09/2012

Edson Oliveira

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
Responder

08/09/2012

Hugo

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
Responder

14/09/2012

Hugo

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar