有3个表:
TableBook:存放预定信息(ID,CustomerName,Tel,MenuID,Bookdate,TableName)
TableBookTrans:存放预定单号信息(TransID,TransNo,Total,MenuID,TransDate)
TableBookDetail:存放预定商品信息(TransID,Barcode,Item,Descriptionl,Qty,Status,TransDate)Treeview下显示的是:MenuID(检测MenuID下的Item的状态,当全部为0,不显示,只要有1个为1,就显示这个MenuID).
ListView显示的是MenuID下对应的信息(CustomerName,Barcode,Item,decription,BookDate,TransDate,Qty,Status).问题是:
怎么是符合条件的MenuID放在Treeview里面,而且点这个MenuID时,ListView会显示这个MenuID对应的信息。
TableBook:存放预定信息(ID,CustomerName,Tel,MenuID,Bookdate,TableName)
TableBookTrans:存放预定单号信息(TransID,TransNo,Total,MenuID,TransDate)
TableBookDetail:存放预定商品信息(TransID,Barcode,Item,Descriptionl,Qty,Status,TransDate)Treeview下显示的是:MenuID(检测MenuID下的Item的状态,当全部为0,不显示,只要有1个为1,就显示这个MenuID).
ListView显示的是MenuID下对应的信息(CustomerName,Barcode,Item,decription,BookDate,TransDate,Qty,Status).问题是:
怎么是符合条件的MenuID放在Treeview里面,而且点这个MenuID时,ListView会显示这个MenuID对应的信息。
我用的代码
1, 加tree
While Not objRS.EOF
If objRS(0) = 0 Then
With tvwPackages
strKey = CStr(objRS(3))
If IsNull(objRS(2)) Then
'root node
Set objNode = .Nodes.Add(Null, tvwChild, "Node" & Trim$(objRS(1)) & Trim$(objRS(3)), Trim$(objRS(4)), 1, 2)
objNode.Expanded = True
Else
If Trim$(objRS(1)) = "G" Then
Set objNode = .Nodes.Add("NodeG" & Trim$(objRS(2)), tvwChild, "Node" & Trim$(objRS(1)) & Trim$(objRS(3)), Trim$(objRS(4)), 1, 2)
Else2, nodeclick event
Private Sub tvwPackages_NodeClick(ByVal node As MSComctlLib.node)
Dim strSamePackageCD As String
If NodeSelect = 0 Then
NodeSelect = node.Index
ElseIf NodeSelect = node.Index Then
Exit Sub
Else
NodeSelect = node.Index
End If If bIsPackage(node) Then3, 加list(我用的是listbox)
list.clear
While Not objRS.EOF
If objRS(0) = 0 Then
lstOption.AddItem Trim$(objRS(2))
End If
objRS.MoveNext
Wend
SELECT MenuID From TableBookTrans
WHERE EXISTS (SELECT * FROM TableBookDetail
WHERE TableBookDetail.TransID=TableBookTrans.TransID
AND Status=1)
ORDER BY MenuID
2)点击 TreeView 节点时,做下面的查询(当前的 MenuID 替换 <ID>),用取得的数据重新刷新 ListView
SELECT B.CustomerName, DB.Barcode,DB.Item,DB.Decription,B.BookDate,DB.TransDate,DB.Qty,DB.Status
FROM TableBook B
JOIN TableBookTrans BT ON BT.MenuID=B.MenuID
JOIN TableBookDetail BD ON BD.TransID=BT.TransID
WHERE B.MenuID=<ID>
ORDER BY DB.BarCode
sN = Trim(EF.Fields("ManualKey"))
Set xNod = TreeView1.Nodes.Add(, , sN, sN)
'xNod.Expanded = True
EF.MoveNext
Loop错误是:无效的key。 但是sN有值。
可以加个前缀字符
Set xNod = TreeView1.Nodes.Add(, , "K" & sN, "K" & sN)
看看示例:
'添加 Node 对象。
Dim nodX As Node '声明 Node 变量。
'带有文本 'Root' 的第一个节点。
Set nodX = TreeView1.Nodes.Add(, , "r", "班级名称") '下一个节点是节点 1 ("Root") 的子节点。
Call TreeView1.Nodes.Add("r", tvwChild, "class2007", "2007级")
Call TreeView1.Nodes.Add("r", tvwChild, "class2008", "2008级")
Call TreeView1.Nodes.Add("r", tvwChild, "class2009", "2009级") 注意第三个参数的写法,9楼、10楼第写法就行
key是不允许重复的,lz的sN = Trim(EF.Fields("ManualKey")) 是否有重复?如果重复就应该把月份引入key
Set xNod = TreeView1.Nodes.Add(, , "K" & strMonth & sN, sN)
Dim nd1 As Node
Set nd1 = TreeView1.Nodes.Add(, , "R", "根")
Call sub_AddMonth(nd1)
End SubPrivate Sub sub_AddMonth(nodRoot As Node)
Dim nd2 As Node
Dim i As Integer
For i = 1 To 12
Set nd2 = TreeView1.Nodes.Add(nodRoot, tvwChild, "K" & Format(i, "00"), i & "月")
' Call sub_AddSn(nd2)
Next i
End SubPrivate Sub sub_AddSn(nodMonth As Node)
Dim nd3 As Node
strsql = "select * from mytable where month = '" & Mid(nodMonth.Key, 2, 2) & "' "
rs.open
While Not rs.EOF
Set nd3 = TreeView1.Nodes.Add(nodMonth, tvwChild, nodMonth.Key & sn, sn)
rs.movenext
Wend
End Sub
Dim nd1 As Node
Set nd1 = TreeView1.Nodes.Add(, , "R", "根")
Call sub_AddMonth(nd1)
End SubPrivate Sub sub_AddMonth(nodRoot As Node)
Dim nd2 As Node
Dim i As Integer
For i = 1 To 12
Set nd2 = TreeView1.Nodes.Add(nodRoot, tvwChild, "K" & Format(i, "00"), i & "月")
Call sub_AddSn(nd2)
Next i
End SubPrivate Sub sub_AddSn(nodMonth As Node)
Dim nd3 As Node
strsql = "select * from mytable where month = '" & Mid(nodMonth.Key, 2, 2) & "' "
rs.open
While Not rs.EOF
Set nd3 = TreeView1.Nodes.Add(nodMonth, tvwChild, nodMonth.Key & sn, sn)
rs.movenext
Wend
End Sub
shift很通用,为什么不用?