2011-02-09 4 views
0

У меня есть дерево с четырьмя уровнями; родитель, ребенок, внук, правнук. Мой выбранный номер находится на уровне внука.Как добавить новое дерево в выбранный узел?

То, что я пытаюсь сделать, это создать новое «Treeview» у внука - НЕТ, я не хочу создавать новый узел для «selectednode» (внук). Так оно и должно быть somelike это:

родителем ребенка внучат (New TreeView) РОДИТЕЛИ, который был внуком
правнук ребенок
правнук ребенка внук внук

Он будет похож на родитель где мать и отец ушли, и у них появился новый супруг с другим супругом, кроме супруга существующих детей.

Private Sub PopulateRootLevel() 
      ' query to find first round of parent 
      PopulateNodes(dt, JCATreeView.Nodes) 
    End Sub 

Private Sub PopulateNodes(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection) 
     For Each dr As DataRow In dt.Rows 
      Dim tn As New TreeNode() 
      tn.Text = dr("TITLE").ToString() 
      tn.Value = dr("Parent_ID").ToString() 
      nodes.Add(tn) 

      'If node has child nodes, then enable on-demand populating 
      tn.PopulateOnDemand = (CInt(dr("childnodecount")) > 0) 
     Next 
End Sub 

Private Sub PopulateSubLevel(ByVal parentid As Integer, ByVal parentNode As TreeNode) 

     ' query to find children of parent with child node count of parent 
     da.Fill(dt) 
     PopulateNodes(dt, parentNode.ChildNodes) 
End Sub 

Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, _ 
    ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate 
     ' add a test to determine if this is from TreeView1 or Sub_TreeView1 
     PopulateSubLevel(CInt(e.Node.Value), e.Node) 
End Sub 

Protected Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged 

     Dim selected_parent_id As Integer = sender.SelectedNode.value 
     Parent_to_NEW_TREEVIEW_PopulateSubLevel(selected_parent_id, sender.SelectedNode) 
End Sub 

Private Sub Sub_TreeView1_PopulateSubLevel(ByVal parent_id As Integer, ByVal parentNode As TreeNode) 

     ' Query to get new children of parents 
     da.Fill(dt2) 
     Sub_TreeView1_PopulateNodes(dt2, parentNode.ChildNodes) 
End Sub 

    Private Sub Sub_TreeView1_PopulateNodes(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection) 
     For Each dr As DataRow In dt.Rows 
      Dim tn As TreeNode = New TreeNode() 
      'tn = parentBCNode.Nodes.Add("NEW_PARENT_TREEVIEW") 

      ' query to get child on the new parent treeview 

      tn.Text = dr("New parent title").ToString() 
      tn.Value = dr("New_parent_ID").ToString() 
      nodes.Add(tn) 

      'If node has child nodes, then enable on-demand populating 
      tn.PopulateOnDemand = (CInt(dr("childnodecount")) > 0) 
     Next 
    End Sub 
+0

Новое «древовидное изображение» - это еще один узел. Реальный вопрос: ГДЕ должен быть добавлен новый узел? Является ли это дочерним узлом выбранного узла? –

ответ

0

Вы не можете этого сделать. TreeView не может иметь в качестве одного из своих дочерних узлов другого элемента управления TreeView. Единственное, что вы можете сделать, это присвоить TreeView свойству тега TreeNode, но это не будет отображаться (очевидно). Я не понимаю, почему вы хотели бы этого сделать, если не хотите, чтобы для этого грандиозного дочернего дерева было другое поведение рисования. Вы можете использовать свойство treeNode.Level, чтобы узнать, на каком уровне этот узел. И снова вы можете создать пользовательский объект (который имеет всю необходимую информацию) и сохранить его в свойстве treeNode.Tag.

Смежные вопросы