关于treeview显示的问题!

zhllhzzhl 2005-11-09 05:04:05
真是奇怪了,下面的数据库表的字段,其中CMatId前面带 w 的都是treeview的最后一级节点 ,带s的都不是最后一级节点,treeview(程序见下面)可以正常显示,可是当我把CMatId前面带w的都改成s,前面带s的都改成w,也就是treeview的最后一级节点改为s,不是最后一级的都改为w就不能正常显示了。都是同一段程序呀。我就想实现:treeview的最后一级节点变为s开头,不是最后一级的都为w开头。该如何实现呀!


正常显示的数据库表(w开头的为最后一级):
CMatId CMatName CMatSortId
s0001 一号库 s0000
s0002 二号库 s0000
s0003 三号库 s0000
s0004 四号库 s0000
s101 汽车件 s0001
s10101 汽车件一架 s101
s1010101 汽车件一架一层 s10101
s1010102 汽车件一架二层 s10101
s10102 汽车件二架 s101
s1010201 汽车件二架一层 s10102
s10103 汽车件三架 s101
s1010301 汽车件三架一层 s10103
s102 小汽车件 s0001
s10201 小汽车件一架 s102
s1020101 小汽车件一架一层 s10201
s1020102 小汽车件一架二层 s10201
s201 劳保 s0002
s20101 劳保一架 s201
s2010101 劳保一架一层 s20101
w101010102 汽车件一架一层 s1010101
w101010103 汽车件 s1010101
w101010106 一层 s1010101
w101010201 刹车 s1010102
w101020101 汽层 s1010201
w101030101 活塞 s1010301
w102010101 小层 s1020101
w102010201 汽车层 s1020102
w201010101 劳层 s2010101
w201010102 劳保3 s2010101
w301 三号库 s0003
w401 四号库 s0004



w和s互换以后数据库表变为(s开头的为最后一级):

CMatId CMatName CMatSortId
s101010102 汽车件一架一层 w1010101
s101010103 汽车件 w1010101
s101010106 一层 w1010101
s101010201 刹车 w1010102
s101020101 汽层 w1010201
s101030101 活塞 w1010301
s102010101 小层 w1020101
s102010201 汽车层 w1020102
s201010101 劳层 w2010101
s201010102 劳保3 w2010101
s301 三号库 w0003
s401 四号库 w0004
w0001 一号库 w0000
w0002 二号库 w0000
w0003 三号库 w0000
w0004 四号库 w0000
w101 汽车件 w0001
w10101 汽车件一架 w101
w1010101 汽车件一架一层 w10101
w1010102 汽车件一架二层 w10101
w10102 汽车件二架 w101
w1010201 汽车件二架一层 w10102
w10103 汽车件三架 w101
w1010301 汽车件三架一层 w10103
w102 小汽车件 w0001
w10201 小汽车件一架 w102
w1020101 小汽车件一架一层 w10201 w102010102 小汽车件一架一层 w1020101
w1020102 小汽车件一架二层 w10201
w201 劳保 w0002
w20101 劳保一架 w201
w2010101 劳保一架一层 w20101
w402 四号库 w0004



程序如下:

Form窗体:

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Dim sTr As String
Dim sql2 As String
Dim mylen As Integer
Dim rs As New ADODB.Recordset
sTr = Node.Key
mylen = Len(sTr)
sTr = Right(sTr, mylen - 1)
sql2 = "select * from As_Inventory_Subject where CMatId= '" & "s" & sTr & "' or CMatId= '" & "w" & sTr & "'"
rs.Open sql2, conn
Subject.Text = Replace(Replace(Trim(rs.Fields("CMatId")), "s", ""), "w", "")
CMatName.Text = Trim(rs.Fields("CMatName"))
Text1.Text = Replace(Replace(Trim(rs.Fields("CMatId")), "s", ""), "w", "")
rs.Close
End Sub


模块:

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")) = "0000") 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



报的错误是:

未发现元素
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)

是不是和数据库表中字段的存放顺序有关呀?该如何解决呀!还请高手帮忙呀!!!
...全文
218 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhllhzzhl 2005-11-11
  • 打赏
  • 举报
回复
大喜 解决了!!! 取出的值也按升序排列ok了.谢了!!!
zhllhzzhl 2005-11-10
  • 打赏
  • 举报
回复
还是不行呀! 表里都是按照升序排列的.(降序也试过了)
如果我把所有的不是末级的节点变为w开头以后,所有的末级节点开头要变成x 或者y 或者z 就可以正常显示,变成w上面的字母就不可以了.从a-v都不行. 末级变成x 或者y 或者z以后表里字段的顺序就跟第一种情况一样了.
northwolves 2005-11-09
  • 打赏
  • 举报
回复
另外:

Subject.Text = Replace(Replace(Trim(rs.Fields("CMatId")), "s", ""), "w", "")
CMatName.Text = Trim(rs.Fields("CMatName"))
Text1.Text = Replace(Replace(Trim(rs.Fields("CMatId")), "s", ""), "w", "")
-----------------
text1.text=subject.text 不可以么。


northwolves 2005-11-09
  • 打赏
  • 举报
回复
未发现元素
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)

是不是和数据库表中字段的存放顺序有关呀?该如何解决呀!还请高手帮忙呀!!!
-------------------------------------------------------------------------
感觉和记录的存放顺序有关,父节点(key="d" & Trim(rs.Fields("CMatSortId")))尚未加载时,就准备加载子节点,你按字段 "CMatSortId"将RST排序(不太清楚你的表里该升序还是降序),再加载试试
clear_zero 2005-11-09
  • 打赏
  • 举报
回复
Dim oNodex as node
试试看

你确定你数据里面没有null值,如果有的话rs.fields(0) &""

你确定的nImage,nSelectImage正确?如果不是,建议建立一个imagelist,添加两个icon进去,分别命名Img1,Img2,然后,把treeview和imagelist连接起来
在添加node的时候
tv.nodes.add(,,, "Img1","Img2")

我觉得你的icon添加有问题,你检查一下

顺便说一句,你这个错误时发生在第一次循环还是以后的循环,如果是第一次就多看看image
如果是以后的就多看看数据库

1,451

社区成员

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

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