none
Treeview ASP.Net/C# = Adicionar um Node filho do TreeNode selecionado RRS feed

  • Pergunta

  • Olá!

    Eu preciso montar uma estrutura de pastas num TreeView

    O usuário tem que dar um nome a pasta, clicar num node já existente

    e num botão Adicionar, então aquela pasta será adicionada como filha do node selecionado

    Eu fiz o seguinte:

    No selectedNodeChanged, guardo o Node numa variável selectedNode (só para guardar o node pai)

    e Depois, no método de adicionar no treeview, faço o seguinte código:

    TreeNode nodeFolder = new TreeNode();
    nodeFolder.Text = item.getNome();
    nodeFolder.Value = item.getId().ToString();
    selectedNode.ChildNodes.Add(nodeFolder);

    Fui passo a passo, ele guarda o node certo na variável selectedNode, inclusive nessa ultima linha do código, conferi e o node continuava certo, o que eu tinha clicado.

    também passa os valores certos pro novo Folder (Text e Value)

    E se eu deixar um node fixo para ele adicionar, exemplo

    treeview.Nodes[0].ChildNodes.Add(nodeFolder)

    ele adiciona!  Mas usando a variável, como eu preciso, não funciona, não aparece nada, mas também não dá erro

    Eu vi um pessoal usando selectedNode.Clone(), mas no ASP.Net creio que não funcione, não aparece nada

    Alguém já passou por uma situação parecida??
    Agradeço desde já.

    quinta-feira, 31 de maio de 2012 16:13

Respostas

  • Juliana,

    Ao inves de vc colocar selectedNode.ChildNodes.Add(nodes) coloque assim:

    treeView.FindNode(selectedNode.ValuePath).ChildNodes.Add(nodes);

    • Marcado como Resposta Juliana Amparo quinta-feira, 31 de maio de 2012 19:14
    quinta-feira, 31 de maio de 2012 18:31

Todas as Respostas

  • já deu uma olhada

    http://stackoverflow.com/questions/881607/adding-child-nodes-in-treeview


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quinta-feira, 31 de maio de 2012 16:52
    Moderador
  • Dei uma olhada no link, a idéia é bem parecida, mas acho que a aplicação dele é pra desktop. Porque mesmo sendo c#, muita coisa dali não funciona aqui, .BeginUpdate(por exemplo), o selectedNode.Clone() também não, e somente o 1º node é tido como Nodes, o resto é ChildNode.

    E não dá pra add uma string ao tview, tem que ser um obj TreeNode.

    Mas pelo que eu vi no dele, o meu código deveria funcionar, até funciona se eu determinar fixamente em qual node adicionar, exemplo:

    treeview.Nodes[1].Childnodes.Add(NewNode)

    Mas se em vez de "treeview.Nodes[1]" eu usar uma variável do tipo Node, ele não adiciona na treeview. Não dá erro, acha o treenode certo, mas não aparece.

    quinta-feira, 31 de maio de 2012 17:19
  • Encontrei meu problema, era a lógica mesmo.

    Tava guardando os nodes num Array, para apagá-los e readicioná-los quando fossem atualizados, só que quando isso acontecia eu perdia a referência do selectedNode.

    Valeu, thanks anyway (:

    quinta-feira, 31 de maio de 2012 17:43
  • Juliana,

    poste seu código completo para analisarmos.

    quinta-feira, 31 de maio de 2012 17:47
  • Ta aí, ele tá adicionando no Node Master, mas nos Childs não
         void tvFolder_SelectedNodeChanged(object sender, EventArgs e)
            {
               selectedNode = tvFolder.SelectedNode;
            } 
     void CarregaTreeView(TreeView treeView, ItemEstruturaCustom item)
            {
                //treeView.Nodes.Clear();
               
              //  foreach (ItemEstruturaCustom item in itemEstrutura)
               // {
                    int tipo = item.getTipo();
                    TreeNode nodes = new TreeNode();
                
                    switch (tipo)
                    {
                        case 1:
                            {
                                nodes.Text = item.getNome();
                                nodes.Value = item.getId().ToString();
                                treeView.Nodes.Add(nodes);
                                break;
                            }
                        case 6:
                            {
                                nodes.Text = item.getNome();
                                nodes.Value = item.getId().ToString();
                                if (item.getParent() == 0)
                                {
                                    treeView.Nodes[0].ChildNodes.Add(nodes);
                                }
                                else
                                {   
                                  selectedNode.ChildNodes.Add(nodes);   
                                }
                                break;
                            }
                    }
              //  }
                treeView.ExpandAll();
            }




    quinta-feira, 31 de maio de 2012 18:06
  • Juliana,

    Ao inves de vc colocar selectedNode.ChildNodes.Add(nodes) coloque assim:

    treeView.FindNode(selectedNode.ValuePath).ChildNodes.Add(nodes);

    • Marcado como Resposta Juliana Amparo quinta-feira, 31 de maio de 2012 19:14
    quinta-feira, 31 de maio de 2012 18:31
  • FUNCIONOU! Muuuito obrigada Gustavo! :D

    quinta-feira, 31 de maio de 2012 19:15