Динамическое создание древовидной структуры

Я пытаюсь создать древовидное представление динамически, используя C # и asp.net.

Я создал древовидное представление отложенной загрузки, используя атрибут populate ondemand.

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

За кодом я загрузил свои данные, но сначала заполняю родительские узлы. Я хочу достичь того, что когда я нажимаю на родительский узел, я затем выполняю обратную передачу, а затем заполняю его дочерний узел, а затем снова заполняю его дочерний узел, и так сейчас. У меня тысячи данных, поэтому я не хочу, чтобы все данные были заполнены из-за производительности. Вот почему я хочу заполнить только дочерние узлы на основе выбранного узла. См. Пример ниже:

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

Как видите, может быть несколько родительских узлов и несколько слоев. Они будут заполняться динамически в зависимости от того, что я передаю в БД. Каждый раз, когда я нажимаю на узел, он расширяет узел и заполняет его дочерний элемент с помощью обратной передачи, а затем, когда вы снова щелкаете по ее дочернему элементу, он выполняет обратную передачу и снова заполняет свой дочерний элемент и т. Д. Поэтому мне нужна была помощь в том, как создать динамическое древовидное представление.

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

}

Этот метод выше вызывается при загрузке страницы.

В TreeNodePopulateEvent: (при щелчке по узлу)

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

                }
            }
        }
5
задан Yahia 1 February 2012 в 13:55
поделиться