以下所以节点都是从数据库中读取的,删除时数据库中也同时删除。例如A 包含B,C,D,E,等节点,而D 节点又包含F,G,H,I 等节点,E 又包含X,Y,Z 等节点,当要删除A节点时,如何能将D和E 的子节点或子节点的子节点删除???请各位大虾帮帮忙!!!

解决方案 »

  1.   

    如果只是删除树上的节点的话,非常简单。一句话,me.treeview.nodes.remove <A节点的index或key>
      

  2.   

    Option ExplicitPrivate Sub Command1_Click()
            Dim curNode As Node
            Dim i As Long
            
            Set curNode = Me.TreeView1.SelectedItem
            
            If Not curNode Is Nothing Then
                   Call DELETE_Node(curNode)
                   Me.TreeView1.Nodes.Remove curNode.Key
            End If
            
    End SubPrivate Sub Form_Load()
            Me.TreeView1.Nodes.Add , , "a", "a"
            Me.TreeView1.Nodes.Add "a", tvwChild, "b", "b"
            Me.TreeView1.Nodes.Add "a", tvwChild, "c", "c"
            Me.TreeView1.Nodes.Add "a", tvwChild, "d", "d"
            Me.TreeView1.Nodes.Add "a", tvwChild, "e", "e"
            
            Me.TreeView1.Nodes.Add "d", tvwChild, "f", "f"
            Me.TreeView1.Nodes.Add "d", tvwChild, "g", "g"
            Me.TreeView1.Nodes.Add "d", tvwChild, "h", "h"
            Me.TreeView1.Nodes.Add "d", tvwChild, "i", "i"
            
            Me.TreeView1.Nodes.Add "e", tvwChild, "x", "x"
            Me.TreeView1.Nodes.Add "e", tvwChild, "y", "y"
            Me.TreeView1.Nodes.Add "e", tvwChild, "z", "z"
            
    End Sub
    Private Function DELETE_Node(Nodex As Node) As Boolean
            On Error GoTo err1
            Dim i As Long
            Dim tempNode As Node        If Nodex.Children <> 0 Then
                   Set tempNode = Nodex.Child
                   For i = 1 To Nodex.Children
                        Call DELETE_Node(tempNode)
                        Set tempNode = tempNode.Next
                   Next
            End If
            Debug.Print "delete from table1 where name = '" & Nodex.Text & "'"
            Exit Function
    err1:
            Debug.Print Err.desciption
            Err.Clear
    End Function
      

  3.   

    TreeView的子节点是自动删除的,不必管它数据库中用分级编码
    A "A"
      B "AA"
      C "AB"
      D "AC"
        F "ACA"
        G "ACB"
        h "ACC"
    可以用Like匹配所有子节点的
      

  4.   

    以上的程序运行结果如下:
    --------------------------------
    delete from table1 where name = 'b'
    delete from table1 where name = 'c'
    delete from table1 where name = 'f'
    delete from table1 where name = 'g'
    delete from table1 where name = 'h'
    delete from table1 where name = 'i'
    delete from table1 where name = 'd'
    delete from table1 where name = 'x'
    delete from table1 where name = 'y'
    delete from table1 where name = 'z'
    delete from table1 where name = 'e'
    delete from table1 where name = 'a'
      

  5.   

    小弟昨天苦思冥想一夜终于想出来了具体如下数据表的字段为:节点编码,节点名称,父节点编码,父节点名称,节点层次引用部件为Microsoft Windows Common Controls 5.0(sp2)源码为
        Dim nodX As Node
        Dim txtsql As String
        Dim msgtext As String
        Dim rs As ADODB.Recordset
        Dim i As Integer
        If Trim(parText) <> "" Then
            With TreeView1
        
                If MsgBox("是否删除" & .Nodes(parText).Text & "?", vbOKCancel, "警告") = vbOK Then
                     '查找到所以要删除的记录
                     'List1控件作为队列使用,将要删除节点的所以子节点和子节点的子节点放入其中
                    List1.Clear
                    '将要删除的节点添加到list1中
                    List1.AddItem Trim(.Nodes(parText).Key)
                    i = 1
                    While i <= List1.ListCount
                    txtsql = "select * from ys where fjdbm = '" & List1.List(i - 1) & "'"
                    Set rs = ExecuteSQL(txtsql, msgtext)
                    While Not rs.EOF
                      List1.AddItem Trim(rs.Fields(0))
                      rs.MoveNext
                    Wend
                    i = i + 1
                    Wend
                    '删除所以list1中的节点
                    txtsql = "delete from ys where jdbm='" & List1.List(0) & "' "
                    For i = 1 To List1.ListCount - 1
                      txtsql = txtsql & " or jdbm='" & List1.List(i) & "' "
                    Next i
                    Set rs = ExecuteSQL(txtsql, msgtext)
                    TreeView1.Nodes.Clear
                    
                    ShowClass'自定义函数功能为将所以的节点从新从数据库中调出
                Else
                    Exit Sub
                End If
            End With
        End If
        不知还有没有错误请各位指教。