有关treeview的问题!

zhllhzzhl 2005-11-06 12:00:01
以下程序treeview能够正常显示数据库里全是w的,我想实现把所有的最末一级节点前面的w都变成s 比如原来是w0001,w101,w10101,w1010101,w101010101(最末一级),我想变成w0001,w101,w10101,w1010101,s101010101 然后正常显示,该如何实现呀!不显示字母也可以,只要数据库里正确就可以.
Public Function LoadFormRecordset1(tv As TreeView, rs As Recordset) As Boolean


Dim oNodex
nImage = 1
nSelectImage = 2

tv.Nodes.Clear

Do While rs.EOF = False
If (Trim(rs.Fields("CMatSortId")) = "w0000") Then
Set oNodex = tv.Nodes.Add(, , "d" & Trim(rs.Fields("CMatId")), Trim(rs.Fields("CMatName")) & "(" & Trim(rs.Fields("CMatId")) & ")", nImage, nSelectImage)
Else
Set oNodex = tv.Nodes.Add("d" & Trim(rs.Fields("CMatSortId")), tvwChild, "d" & Trim(rs.Fields("CMatId")), Trim(rs.Fields("CMatName")) & "(" & Trim(rs.Fields("CMatId")) & ")", nImage, nSelectImage)
tv.Nodes(2).EnsureVisible
End If


rs.MoveNext

Loop
End Function
...全文
244 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
clear_zero 2005-11-08
  • 打赏
  • 举报
回复
遍历所有的node
if node.childern=0 then
node.text=replace(node.text,"w","s")
end if

我的测试通过了,你再看看

winehero 2005-11-08
  • 打赏
  • 举报
回复
可以看出LZ的节点表是自关联的(CMatSortId是与CMatId相关联的,名称上将之改为CMatParent
可能好理解一些,呵呵). 查找叶结点显然采用先序遍历,首先判断当前节点的Children是否为0,
即是否为叶结点,如果是该Node的Text,否则查找Child(调用该递归),接着是FirstSibling,直到
LastSibling.
rainstormmaster 2005-11-08
  • 打赏
  • 举报
回复
先遍历所有node,如果某个node是最末一级节点,则修改该node的text属性
zhllhzzhl 2005-11-07
  • 打赏
  • 举报
回复
总报错: 未发现元素

我觉得好像就跟有个s101010101 有关.
Else
Set oNodex = tv.Nodes.Add("d" & Trim(rs.Fields("CMatSortId")), tvwChild, "d" & Trim(rs.Fields("CMatId")), Trim(rs.Fields("CMatName")) & "(" & Trim(rs.Fields("CMatId")) & ")", nImage, nSelectImage)
tv.Nodes(2).EnsureVisible
zhllhzzhl 2005-11-07
  • 打赏
  • 举报
回复
Public Function LoadFormRecordset1(tv As TreeView, rs As Recordset) As Boolean


Dim oNodex
nImage = 1
nSelectImage = 2

tv.Nodes.Clear

Do While rs.EOF = False
If (Trim(rs.Fields("CMatSortId")) = "w0000") Then
Set oNodex = tv.Nodes.Add(, , "d" & Trim(rs.Fields("CMatId")), Trim(rs.Fields("CMatName")) & "(" & Trim(rs.Fields("CMatId")) & ")", nImage, nSelectImage)



End If


rs.MoveNext

Loop

Dim i as long
For i = 1 To tv.Nodes.Count
Set oNodex = tv.Nodes(i)
if oNodex.children=0 then oNodex=replace(oNodex,"w","s")
next

End Function
这样是可以的,也就是不建立子节点情况下,我把节点w0001,w0002,w0003,w0004中的w0001改成s0001可以正常显示.加上子节点以后,我把w0001,w101,w10101,w1010101,w101010101(最末一级),改成w0001,w101,w10101,w1010101,s101010101(最末一级),就不行了.
northwolves 2005-11-06
  • 打赏
  • 举报
回复
'没法调试,试试吧

Public Function LoadFormRecordset1(tv As TreeView, rs As Recordset) As Boolean


Dim oNodex
nImage = 1
nSelectImage = 2

tv.Nodes.Clear

Do While rs.EOF = False
If (Trim(rs.Fields("CMatSortId")) = "w0000") Then
Set oNodex = tv.Nodes.Add(, , "d" & Trim(rs.Fields("CMatId")), Trim(rs.Fields("CMatName")) & "(" & Trim(rs.Fields("CMatId")) & ")", nImage, nSelectImage)
Else
Set oNodex = tv.Nodes.Add("d" & Trim(rs.Fields("CMatSortId")), tvwChild, "d" & Trim(rs.Fields("CMatId")), Trim(rs.Fields("CMatName")) & "(" & Trim(rs.Fields("CMatId")) & ")", nImage, nSelectImage)
tv.Nodes(2).EnsureVisible
End If


rs.MoveNext

Loop

'加上以下代码试试:
Dim i as long
For i = 1 To tv.Nodes.Count
Set oNodex = tv.Nodes(i)
if oNodex.children=0 then oNodex=replace(oNodex,"w","s")
next

End Function

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧