Usuário com melhor resposta
Treeview ASP.Net/C# = Adicionar um Node filho do TreeNode selecionado

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á.
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
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
-
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.
-
-
-
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(); }
-
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
-