如题,在线等
解决方案 »
- 我想开发这样一个可以监控广域网状态的软件,用什么语言呀?
- 如何获得当前系统硬盘的序列号?
- 局域网工作站信息管理系统
- 发布一个VB写的VB.(API+类+模块实现VB原型.)
- 找一个可以帮我学VB的人
- Date/Time怎么写?
- 天哪!谁来帮我解决一下有关Mscomm拨号的问题? 急!!!!!!!!!!!!!!!!!
- Internet Transfer 控件下载问题(动态获得服务器地址)
- 高手帮帮忙啊!
- 急(vb)
- 高分求解答,通过TreeView和ListView怎么做到显示类似于有四层节点的数结构啊?
- 为什么我的程序里定义了一个双精度型的字段,在DBGRID里就不能输入小数了呢,我是用ACCESS + DEPHI 7
1,最简单的办法:先记录下k2这个node的信息,然后用nodes.remove "k2"删除调这个k2这个node,这样其子node也都没了,然后在add回原先的k2这个node;
2,枚举k2的所有的子节点,依次删除,程序如下:
Dim obj As Node
Dim k() As String
Dim iCount As IntegerFor Each obj In tvw.Nodes
If Not (obj.Parent Is Nothing) Then
If obj.Parent.Key = "k2" Then
ReDim Preserve k(iCount)
k(iCount) = obj.Key
iCount = iCount + 1
End If
End If
Next objFor i = 0 To iCount - 1
tvw.Nodes.Remove k(i)
Next
Type BaseParameter
Cnn As ADODB.Connection 'ADODB 连接
TrvName As Object '树名称.
TabName As String '树对应的数据表名
ParFld As String '数据表中父节点的字段名.
ChildFld As String '数据表中子节点的字段名.
TextFld As String '数据表中节点文本名称的字段名.
RootIco As String '树中根目录的图标号.
Parico As String '树中父节点的图标号.
ExpParIco As String '树中展表一个节点时的图标号.
ChildIco As String '树中子节点的图标号.
RootText As String '树中根节点的文件.
End TypeDim TrvBasePar As BaseParameter'
'删除某节点下的所有子节点(递归)
'函数:KillNodex
'参数:SelNode 被删除的节点.
'返回值:
'说明:该函数既删除树中的节点,亦删除数据库中的节点及其子节点.Public Function KillNodex(SelNode As Object)
If SelNode.Key <> SelNode.Root.Key Then
If SelNode.Parent.Children <= 1 And SelNode.Parent.Key <> SelNode.Root.Key Then
SelNode.Parent.Image = TrvBasePar.ChildIco
SelNode.Parent.ExpandedImage = TrvBasePar.ChildIco
End If
Call DelNode(SelNode)
TrvBasePar.TrvName.Nodes.Remove (SelNode.Key)
End If
End FunctionPrivate Function DelNode(NodeX As Node)
Dim N As Long
Dim StrSql As String
Dim MoveNode() As Node
Dim AddId As Long
Dim TmpNode As Node
With TrvBasePar
If Not (TrvBasePar.Cnn Is Nothing) Then
StrSql = "DELETE FROM " & .TabName & " WHERE " & .ParFld & "='" & Right$(NodeX.Parent.Key, Len(NodeX.Parent.Key) - 1) & "' AND " & _
.ChildFld & "='" & Right$(NodeX.Key, Len(NodeX.Key) - 1) & "'"
TrvBasePar.Cnn.Execute StrSql
End If
If NodeX.Children > 0 Then
AddId = 0
N = NodeX.Child.Index
If .TrvName.Nodes(N).Children > 0 Then
AddId = AddId + 1
ReDim Preserve MoveNode(AddId)
Set MoveNode(AddId - 1) = .TrvName.Nodes(N)
Else
Set TmpNode = .TrvName.Nodes(N)
If Not (.Cnn Is Nothing) Then
StrSql = "DELETE FROM " & .TabName & " WHERE " & .ParFld & "='" & Right$(TmpNode.Parent.Key, Len(TmpNode.Parent.Key) - 1) & "' AND " & _
.ChildFld & "='" & Right$(TmpNode.Key, Len(TmpNode.Key) - 1) & "'"
.Cnn.Execute StrSql
End If
End If
While N <> NodeX.Child.LastSibling.Index
N = .TrvName.Nodes(N).Next.Index
If .TrvName.Nodes(N).Children > 0 Then
AddId = AddId + 1
ReDim Preserve MoveNode(AddId)
Set MoveNode(AddId - 1) = .TrvName.Nodes(N)
Else
Set TmpNode = .TrvName.Nodes(N)
If Not (.Cnn Is Nothing) Then
StrSql = "DELETE FROM " & .TabName & " WHERE " & .ParFld & "='" & Right$(TmpNode.Parent.Key, Len(TmpNode.Parent.Key) - 1) & "' AND " & _
.ChildFld & "='" & Right$(TmpNode.Key, Len(TmpNode.Key) - 1) & "'"
.Cnn.Execute StrSql
End If
End If
Wend
If AddId > 0 Then
For N = 0 To AddId - 1
Call DelNode(MoveNode(N))
Next
End If
End If
End With
End Function