我有一个SQL 05存储过程,它带回大约180行结构:
ID |名称|的ParentId。
我想要做的是根据返回的记录创建一个Treeview。 以下是我在论坛其他地方改编的样本(here)
我差点把它做成我想做的但不完全。
这是我的问题, 根添加好了。 下一层添加好了。 但是,它不知道下一个ParentId应该是什么。我应该只增加变量并尝试找到匹配项吗?我想我应该在顶级方法中包含它。
希望我不远,需要朝着正确的方向努力,
非常感谢提前 迈克尔
最后,BOF和EOF检查在循环中,因为如果我没有它,我似乎已经抛出了很多错误。
Private Sub MakeTree(ByVal rs As ADODB.Recordset)
rs.MoveFirst
Do Until rs.EOF
If (IsNull(rs.Fields("ParentID"))) Then
Call TVFunds.Nodes.Add(, , "Key" + CStr(rs.Fields("Id")), rs.Fields("Name"))
Call MsgBox("Key" + CStr(rs.Fields("Id")) + " " + rs.Fields("Name"), vbInformation, "Added Root")
Else
DrawNode rs, rs.Fields("ParentID"), rs.Fields("ID")
End If
If rs.BOF <> True And rs.EOF <> True Then
rs.MoveNext
End If
Loop
End Sub
Private Sub DrawNode(ByRef r As ADODB.Recordset, ByRef pId As Integer, ByRef Id As Integer)
r.MoveFirst
Do Until r.EOF
If (r.Fields("ParentId") = pId And r.Fields("Id") = Id) Then
Call TVFunds.Nodes.Add("Key" + CStr(r.Fields("ParentId")), tvwChild, "Key" + CStr(r.Fields("Id")), r.Fields("Name"))
Call MsgBox("Key" + CStr(r.Fields("ParentId")) + " Key" + CStr(r.Fields("Id")) + " " + r.Fields("Name"), vbInformation, "Added")
Id = Id + 1
DrawNode r, pId, Id
End If
If r.BOF <> True And r.EOF <> True Then
r.MoveNext
End If
Loop
End Sub
答案 0 :(得分:1)
首先要做的事情:Do Until ...循环总是至少执行一次。因此,如果记录集没有行,它仍将进入循环。这就是为什么你在没有EOF / BOF检查的情况下得到这些错误的原因。
将那些Do Until ...循环更改为Do While ...循环如下:
Do While Not rs.EOF
If (IsNull(rs.Fields("ParentID"))) Then
Call TVFunds.Nodes.Add(, , "Key" + CStr(rs.Fields("Id")), rs.Fields("Name"))
Call MsgBox("Key" + CStr(rs.Fields("Id")) + " " + rs.Fields("Name"), vbInformation, "Added Root")
Else
DrawNode rs, rs.Fields("ParentID"), rs.Fields("ID")
End If
rs.MoveNext
Loop