Créer dynamiquement un treeview

Je suis en train de créer une arborescence de manière dynamique à l'aide de c# et asp.net.

J'ai créé un lazy load treeview à l'aide de la remplir à la demande de l'attribut.

>  <asp:TreeView ID="treeView1"  runat="server" 
>              OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView>

Derrière le code que j'ai chargé mes données mais j'ai d'abord remplir les nœuds parents. Ce que je veux réaliser est quand je clique sur le nœud parent je puis faire une publication, puis de renseigner son enfant, puis de nouveau remplir son enfant et de le faire aujourd'hui. J'ai des milliers de données, de sorte que je ne veux pas toutes les données pour être peuplée en raison de la performance. C'est la raison pour laquelle je ne veux remplir le nœud de l'enfant basé sur le nœud sélectionné. Voir l'exemple ci-dessous:

>Peter
    - - >user1
    - - >user2
    - - >user3
       - - >userPassword
       - - >userId
>john
>david
>Jack
    - - >user1
    - - >user2
       - - >userpassword
       - - >userId
       - - >Permissions
>Laura 
    - - > admin
    - - > permissions
       -- > user1
       -- > user2
         - - >userpassword
             - - >userId
             - - >Permissions           
>...
>...
>...

Comme vous pouvez le voir il peut y avoir plusieurs nœuds parents et de plusieurs couches. Ceux-ci seront répercutées dynically basé sur ce que je passe pour la base de données. Chaque fois que je clique sur le nœud, il va développez le nœud et remplir son enfant à l'aide de publication et ensuite, lorsque vous cliquez sur son enfant nouveau, il va faire une publication et remplir son enfant à nouveau, etc. Donc, je voulais de l'aide sur la façon de créer une dynamique treeview.

c# :

private void LoadTreeview()
{
 //Load data
 //Get data from DB.
 //loop through the list and build its parent nodes.
  foreach (var dxm in list)
  {
                TreeNode tnParent = CheckNodeExist(dxm.Node); //I check to see if exists.
                if (tnParent== null)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = dxm.Node;
                    tn.Value = dxm.Id.ToString();
                    tn.SelectAction = TreeNodeSelectAction.None;
                    tn.Collapse();
                    treeView1.Nodes.Add(tn);
                    tn.PopulateOnDemand = true; //lazy load
                    tnParent= tn;
                }

}

Cette méthode ci-dessus est appelée au chargement de la page.

Sur TreeNodePopulateEvent: (lorsqu'un nœud est cliqué sur)

protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
        {
            ICollection<ITEMS> list = new Collection<ITEMS>();           

            list = GetData(e.Node.Text); //pass in the node you have selected  this will go and check in DB if the node does have any child nodes. If so will return with child nodes.

            foreach (var dxm in list)
            {

                TreeNode tnChild = CheckNodeExist(dxm.Node);
                if (tnChild == null)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = dxm.Node;
                    tn.Value = dxm.Id.ToString();
                    tn.SelectAction = TreeNodeSelectAction.None;
                    tn.Collapse();

                    tn.PopulateOnDemand = true;
                    tnChild = tn;
                    tnChild.ChildNodes.Add(tnChild);                  

                }
            }
        }

OriginalL'auteur user929153 | 2012-02-01