samin panahi
samin panahi

Reputation: 25

How to add a child of a child?

I'm a beginner in C# and have a simple question about TreeView.

I want to do something like this:

> -Root
>    -child1
>        -child2
>            -child3
>                  -....

I have this:

child.Text = des[j];
root.Nodes.Add(child);

But it just yields something like this:

> -Root
>     -child1

I want:

With different names like: root1, root2, root3, etc.

for (i = 0; i < 10; i++)
{
    TreeNode root = new TreeNode();
}

Upvotes: 0

Views: 146

Answers (2)

HuorSwords
HuorSwords

Reputation: 2245

You only need to keep track of the current node and the child to be inserted.

  • At i = 0, the current node value is the root node.
  • At i > 0, the current node value is the last child node inserted.

Then, you can try something like this...

TreeNode current = new TreeNode(); // Root node.
current.Text = string.Format("Root");
for (int i = 0; i < 10; i++)
{
    TreeNode child = new TreeNode();
    child.Text = string.Format("Child: {0}", i);
    current.Nodes.Add(child);
    current = child;
}

The result of this code will be:

  • Root
    • Child: 0
      • Child: 1
        • Child: 2

Upvotes: 0

Char George
Char George

Reputation: 104

You need to add the TreeNode to the Nodes collection of the child, not the root.

child.Text = des[j];

root.Nodes.Add(child);

TreeNode NextChild  = new TreeNode();
NextChild.Text = "something";
child.Nodes.Add(NextChild);

For your second Question, you would need to store those treenodes in some kind of datastructure. If you want to name each one, a hashtable would be a good bet.

Hashtable myHT = new Hashtable();

for (int i = 0; i < 10; i++)

{

    TreeNode root = new TreeNode();
    myHT.Add("Root" + i, root);

}

You would then access them like,

TreeNode myRoot = (TreeNode)myHT["Root1"];

If you are comfortable with Generics you can use the System.Collections.Generic.Dictionary instead for a generic version.

Upvotes: 1

Related Questions