Crie dinamicamente uma visualização em árvore

stou tentando criar uma exibição em árvore dinamicamente usando c # e asp.ne

Criei uma visualização em árvore de carga lenta usando o atributo preencher ondeman

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

ódigo @Behind Carreguei meus dados, mas inicialmente preencho os nós principais. O que eu quero alcançar é que, quando clico no nó pai, faço uma postagem e preenche seu filho e, em seguida, preenche novamente seu filho e agora. Eu tenho milhares de dados, então não quero que todos os dados sejam preenchidos devido ao desempenho. Essa é a razão pela qual eu só quero preencher os filhos do nó com base no nó selecionado. Veja o exemplo abaixo:

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

Como você pode ver, pode haver vários nós pai e várias camadas. Estes serão preenchidos dinamicamente com base no que eu passo para o DB. Sempre que eu clicar no nó, ele expandirá o nó e preencherá seu filho usando a postagem e, quando você clicar novamente no filho, ele fará um postback e preencherá o filho novamente etc. Então, eu queria ajuda sobre como criar uma exibição dinâmica das árvores.

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;
                }

}

Este método acima é chamado no carregamento da págin

On TreeNodePopulateEvent: (quando um nó é clicado)

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);                  

                }
            }
        }

questionAnswers(2)

yourAnswerToTheQuestion