有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对应的信息。

解决方案 »

  1.   

    感觉lz的主要问题是对Treeview的用法不清楚,搜一下Treeview的用法吧
      

  2.   

    表的关系讲下,
    我用的代码
    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
      

  3.   

    1)TreeView 用以下查询(如果 MenuID 有重复加上 DISTINCT 限定),将每个 MenuID 加入 TreeView
    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
      

  4.   

    Treeview和ListView的 用法很简单,就是lz的意思不太明白
      

  5.   

       Do While Not EF.EOF
            sN = Trim(EF.Fields("ManualKey"))
            Set xNod = TreeView1.Nodes.Add(, , sN, sN)
            'xNod.Expanded = True
            EF.MoveNext
        Loop错误是:无效的key。 但是sN有值。
      

  6.   

    不能用纯数字的字符串作为 Key!
    可以加个前缀字符
    Set xNod = TreeView1.Nodes.Add(, , "K" & sN, "K" & sN)
      

  7.   

    Set xNod = TreeView1.Nodes.Add(, , "K" & sN,  sN)后面的可以不加
      

  8.   

    lz只是一层吗?这样的话用treeview可能不是太好看
      

  9.   


    看看示例:
       '添加 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楼第写法就行
      

  10.   


    key是不允许重复的,lz的sN = Trim(EF.Fields("ManualKey")) 是否有重复?如果重复就应该把月份引入key
    Set xNod = TreeView1.Nodes.Add(, , "K" & strMonth & sN,  sN)
      

  11.   

    按你的程序给你一个示意代码Private Sub Command1_Click()
        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
      

  12.   

    那个注释掉的不应该Private Sub Command1_Click()
        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
      

  13.   

    listview中如何用鼠标选择多行(不用SHIFT),还有选择一条纪录 全部一列都变一样颜色。
      

  14.   


    shift很通用,为什么不用?
      

  15.   

    用checkbox吧,ListView1.CheckBoxes = True