2009-05-19 26 views
13

Soy nuevo en C# y no tengo ninguna experiencia en programación. Pero terminé con los conceptos básicos de C#. Ahora me gustaría diseñar una vista de árbol simple agregando nodo padre y nodo hijo.agregando nodos secundarios en treeview

Me gustaría agregar un segundo hijo para el segundo nodo, estoy bastante atrapado aquí y no sé qué será lo próximo.

¿Alguna idea?

Aquí está el código:

private void addParentNode_Click(object sender, EventArgs e) 
    { 
     string yourParentNode; 
     yourParentNode = textBox1.Text.Trim(); 
     treeView2.Nodes.Add(yourParentNode); 
    } 

    private void addChildNode_Click(object sender, EventArgs e) 
    { 
     string yourChildNode; 
     yourChildNode = textBox1.Text.Trim(); 
     treeView2.Nodes[0].Nodes.Add(yourChildNode); 
    } 

Lo siento, no estaba claro, no estoy seguro de si realmente necesito este de aquí:

//treeView1.BeginUpdate(); 
    //treeView1.Nodes.Clear(); 

Lo que estoy tratando de hacer , es agregar Nodos principales y nodo hijo. En mi código, puedo agregar varios nodos principales, pero si deseo agregar un nodo secundario, solo agregará el primer nodo padre. Quiero que si agrego un nodo secundario, quiero agregarlo al segundo padre o tercer padre.

En mi código que sólo utiliza una vista de árbol aquí, que nombres como TreeView2 Aquí está la screenshot

Así es como mi código final se parece a: Antes de poner la otra cosa, estoy recibiendo un error si no selecciones nada Así que lo hice de esa manera que si no hay nada seleccionado agregará el "nodo hijo" al "nodo predeterminado" o (nodo parent1). Parece que funciona bien. Gracias chicos ;-)

//This is for adding a parent node 
    private void addParentNode_Click(object sender, EventArgs e) 
    { 
     treeView2.BeginUpdate(); 

     string yourParentNode; 
     yourParentNode = textBox1.Text.Trim(); 
     treeView2.Nodes.Add(yourParentNode); 
     treeView2.EndUpdate(); 
    } 

    //This is for adding child node 
    private void addChildNode_Click(object sender, EventArgs e) 
    { 
     if (treeView2.SelectedNode != null) 
     { 
      string yourChildNode; 
      yourChildNode = textBox1.Text.Trim(); 

      treeView2.SelectedNode.Nodes.Add(yourChildNode); 
      treeView2.ExpandAll(); 
     } 
     //This is for adding the child node to the default node(parent 1 node) 
     else 
     { 
      string yourChildNode; 
      yourChildNode = textBox1.Text.Trim(); 
      treeView2.Nodes[0].Nodes.Add(yourChildNode); 
     } 

Pregunta adicional: ¿Hay alguna otra forma de cómo el código sea mejor? Porque aquí, declaro la cadena "yourChildNode" dos veces. Uno en el si y el otro en el otro, ¿hay alguna simplificación?

+0

Es un poco difícil entender lo que está tratando de hacer aquí. Parece que tiene 2 controles de vista de árbol, pero solo uno de ellos está en uso.¿Cuál es la relevancia del primero en tu muestra de código? ¿En qué punto de la jerarquía de la vista de árbol desea agregar nodos? Tal vez una captura de pantalla o maqueta del efecto podría ayudar aquí –

+0

--- Su solución está aquí --- http://stackoverflow.com/questions/8861371/adding-nodes-to-a-specific-parent- node-in-a-treeview-c –

Respuesta

17

No es tan malo, pero olvidó llamar al treeView2.EndUpdate() en su método addParentNode_Click().
También puede llamar al treeView2.ExpandAll() al final de su método addChildNode_Click() para ver su nodo hijo directamente.

private void addParentNode_Click(object sender, EventArgs e) { 
    treeView2.BeginUpdate(); 
    //treeView2.Nodes.Clear(); 
    string yourParentNode; 
    yourParentNode = textBox1.Text.Trim(); 
    treeView2.Nodes.Add(yourParentNode); 
    treeView2.EndUpdate(); 
} 

private void addChildNode_Click(object sender, EventArgs e) { 
    if (treeView2.SelectedNode != null) { 
    string yourChildNode; 
    yourChildNode = textBox1.Text.Trim(); 
    treeView2.SelectedNode.Nodes.Add(yourChildNode); 
    treeView2.ExpandAll(); 
    } 
} 

No sé si fue un error o no, pero había 2 TreeViews. Lo cambié a sólo el 1 TreeView ...

EDIT: respuesta a la pregunta adicional:
Se puede declarar la variable que contiene el nombre del nodo hijo fuera de la cláusula if:

private void addChildNode_Click(object sender, EventArgs e) { 
    var childNode = textBox1.Text.Trim(); 
    if (!string.IsNullOrEmpty(childNode)) { 
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0]; 
    if (parentNode != null) { 
     parentNode.Nodes.Add(childNode); 
     treeView2.ExpandAll(); 
    } 
    } 
} 

Nota: ver http://www.yoda.arachsys.com/csharp/csharp2/nullable.html para obtener información sobre el ?? operador.

+0

gracias Julien, tu código funciona pero me gustaría agregar el nodo hijo2 en el segundo nodo padre. Con este código, si agrego el childnode2 al parentnode2 no funciona de esa manera. Siempre agrega el nuevo hijo al parentnode1. – tintincutes

+0

¿Desea agregar un nodo secundario al último nodo insertado o al nodo seleccionado? –

+0

al nodo seleccionado, por ejemplo. – tintincutes

2

ejemplo de cómo agregar nodos secundarios:

private void AddExampleNodes() 
     { 
      TreeNode node; 

      node = treeView1.Nodes.Add("Master node"); 
      node.Nodes.Add("Child node"); 
      node.Nodes.Add("Child node 2"); 

      node = treeView1.Nodes.Add("Master node 2"); 
      node.Nodes.Add("mychild"); 
      node.Nodes.Add("mychild"); 
     } 
+0

Hola Stormenet, gracias. Pero creo que esta es una vista de árbol terminada, ¿es correcto? – tintincutes

2

Parece que sólo se está añadiendo a los niños a la primera matriz treeView2.Nodes[0].Nodes.Add(yourChildNode)
Dependiendo de cómo desea que se comporte, necesita ser explícito sobre el nodo padre desea agregar al niño a.
por ejemplo, de su pantalla, si desea agregar a su niño al segundo nodo que se necesita:
treeView2.Nodes[1].Nodes.Add(yourChildNode)
Si desea agregar a los niños al nodo seleccionado en ese momento, obtener el TreeView.SelectedNode y añadir a los niños a eso.

Pruebe TreeView para tener una idea de cómo funciona la clase. Desafortunadamente, la documentación de msdn es bastante liviana en los ejemplos de código ...

¡Aquí faltan muchos controles de seguridad!

Algo así (no probado):

private void addChildNode_Click(object sender, EventArgs e) { 
    TreeNode ParentNode = treeView2.SelectedNode; // for ease of debugging! 
    if (ParentNode != null) { 
    ParentNode.Nodes.Add("Name Of Node"); 
    treeView2.ExpandAll(); // so you can see what's been added    
    treeView2.Invalidate(); // requests a redraw 
    } 
} 
+0

Gracias Byron, me gustaría agregar el nodo secundario al nodo principal seleccionado. Usted mencionó, TreeView.SelectedNode ¿dónde puedo agregarlo? en el botón addParentNode o add_ChildNode? Gracias – tintincutes

+0

Hola Byron, en su código "Treenode" es "TreeNode" o "Treenode". Porque si escribo "Treenode" obtuve una marca roja. Lo que significa que algo está mal. – tintincutes

+0

me ayudó gracias! – Aisha

10

puede que añadir a Stormenet ejemplo, algunos de KISS (Keep It Simple & estúpida):

Si ya tiene un TreeView o acaba de crear una instancia de ella : Vamos a completar con algunos datos - Ex. Un padre dos hijos:

  treeView1.Nodes.Add("ParentKey","Parent Text"); 
      treeView1.Nodes["ParentKey"].Nodes.Add("Child-1 Text"); 
      treeView1.Nodes["ParentKey"].Nodes.Add("Child-2 Text"); 

Otro ej. dos de los padres primero tienen dos segundo hijo del niño:

  treeView1.Nodes.Add("ParentKey1","Parent-1 Text"); 
      treeView1.Nodes.Add("ParentKey2","Parent-2 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("Child-2 Text"); 
      treeView1.Nodes["ParentKey2"].Nodes.Add("Child-3 Text"); 

tomar si más - sub hijo del niño 2:

  treeView1.Nodes.Add("ParentKey1","Parent-1 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes.Add("ChildKey2","Child-2 Text"); 
      treeView1.Nodes["ParentKey1"].Nodes["ChildKey2"].Nodes.Add("Child-3 Text"); 

Como ves que puede tener tantos niños de y al padre como desee y aquellos puede tener secundario niño de niño y así sucesivamente .... Espero que ayude!

0
void treeView(string [] LineString) 
    { 
     int line = LineString.Length; 
     string AssmMark = ""; 
     string PartMark = ""; 
     TreeNode aNode; 
     TreeNode pNode; 
     for (int i=0 ; i<line ; i++){ 
      string sLine = LineString[i]; 
      if (sLine.StartsWith("ASSEMBLY:")){ 
       sLine = sLine.Replace("ASSEMBLY:",""); 
       string[] aData = sLine.Split(new char[] {','}); 
       AssmMark = aData[0].Trim(); 
       //TreeNode aNode; 
       //aNode = new TreeNode(AssmMark); 
       treeView1.Nodes.Add(AssmMark,AssmMark); 
      } 
      if(sLine.Trim().StartsWith("PART:")){ 
       sLine = sLine.Replace("PART:",""); 
       string[] pData = sLine.Split(new char[] {','}); 
       PartMark = pData[0].Trim(); 
       pNode = new TreeNode(PartMark); 
       treeView1.Nodes[AssmMark].Nodes.Add(pNode); 
      } 
     } 
0

Puede realizar lo siguiente para poblar treeView con nodo primario y secundario. Y también con la pantalla y el valor del miembro de los nodos padre e hijo:

arrayRoot = taskData.GetRocordForRoot(); // iterate through database table 
    for (int j = 0; j <arrayRoot.length; j++) { 
       TreeNode root = new TreeNode(); // Creating new root node 
       root.Text = "displayString"; 
       root.Tag = "valueString"; 
       treeView1.Nodes.Add(root); //Adding the root node 

      arrayChild = taskData.GetRocordForChild();// iterate through database table 
       for (int i = 0; i < arrayChild.length; i++) { 
        TreeNode child = new TreeNode(); // creating child node 
        child.Text = "displayString" 
        child.Tag = "valueString"; 
        root.Nodes.Add(child); // adding child node 
       } 

      } 
1

Tenía que hacer algo similar y encontré los mismos problemas. Usé el evento AfterSelect para asegurarme de que no recibía el nodo previamente seleccionado.

En realidad es muy fácil hacer referencia al nodo correcto para recibir el nuevo nodo secundario.

private void TreeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) 
{ 
    //show dialogbox to let user name the new node 
    frmDialogInput f = new frmDialogInput(); 
    f.ShowDialog(); 

    //find the node that was selected 
    TreeNode myNode = TreeView1.SelectedNode; 
    //create the new node to add 
    TreeNode newNode = new TreeNode(f.EnteredText); 
    //add the new child to the selected node 
    myNode.Nodes.Add(newNode); 
} 
0

Guys utilizar este código para añadir nodos y childNodes para TreeView de C# código. *

de KISS (Keep It Simple & estúpida:) *

protegida (object sender, EventArgs e) void Button1_Click

{

 TreeNode a1 = new TreeNode("Apple"); 

     TreeNode b1 = new TreeNode("Banana"); 
     TreeNode a2 = new TreeNode("gree apple"); 
     TreeView2.Nodes.Add(a1); 
     TreeView2.Nodes.Add(b1); 
     a1.ChildNodes.Add(a2); 

}

+0

No hay '&' en KISS –

+0

Es Nodos. No hay propiedad de ChildNotes. –

0
SqlConnection con = new SqlConnection(@"Data Source=NIKOLAY;Initial Catalog=PlanZadanie;Integrated Security=True"); 
     SqlCommand cmd = new SqlCommand(); 
     DataTable dt = new DataTable(); 
     public void loadTree(TreeView tree) 
     { 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "SELECT [RAZDEL_ID],[NAME_RAZDEL] FROM [tbl_RAZDEL]"; 
      try 
      { 
       con.Open(); 
       SqlDataReader reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        tree.Nodes.Add(reader.GetString(1)); 
        tree.Nodes[0].Nodes.Add("yourChildNode"); 
        tree.ExpandAll(); 

       } 

       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Ошибка с сообщением: " + ex.Message); 
      } 


     } 

+0

Al responder preguntas, es mejor explicar con más detalle para que otros usuarios del sitio puedan comprenderlo más fácilmente. – Tristan

Cuestiones relacionadas