⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeview.frm

📁 适合乡镇供电所使用电费处理系统v3 软件
💻 FRM
📖 第 1 页 / 共 2 页
字号:
        .ListIndex = 3
    End With

    ' Configure ListView control.
    lvwDB.View = lvwReport
        
    ' Configure TreeView
    With tvwDB
        .Sorted = True
        Set mNode = .Nodes.Add()
        .LabelEdit = False
        .LineStyle = tvwRootLines
    End With
    
    With mNode ' Add first node.
        .Text = "用户名单"
        .Tag = "Biblio"
        .Image = "closed"
    End With
   
   Dim rs As New ADODB.Recordset
   rs.Open "select * from 用户电费", cn, adOpenStatic, adLockOptimistic
   Set DataGrid1.DataSource = rs

    frmTreeview.Show
    
  '  mnuLoad_Click
    Exit Sub
 
    ' 如果 Biblio 数据库不能被找到,打开
    ' 公用对话框控件让用户来查找它。
errFind:
    
    If Err = -2147467259 Then
        Set cn = Nothing
        Set cn = New ADODB.Connection
        cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & FindBiblio
        cn.Open
        Resume Next
    ElseIf Err <> 0 Then ' 其他的错误
        MsgBox "不期望的错误: " & Err.Description
        End
    End If
End Sub

Private Sub lvwDB_ColumnClick(ByVal ColumnHeader As ColumnHeader)
    lvwDB.SortKey = ColumnHeader.Index - 1
    ' 设置 Sorted 为真对列表进行排序。
    lvwDB.Sorted = True
End Sub

Private Sub lvwDB_ItemClick(ByVal Item As ListItem)
    GetData Item.Key
 End Sub
Private Sub GetData(ISBN As String)
    ' 全局的 EventFlag 指示有多少个状态栏被使用。
    
    If EventFlag <> TITLE Then
        sbrDB.Panels.Clear
        Dim pnlX As Panel
        Set pnlX = sbrDB.Panels.Add(, "ISBN")
        pnlX.AutoSize = sbrContents
        Set pnlX = sbrDB.Panels.Add(, "author")
        pnlX.AutoSize = sbrContents
        Set pnlX = sbrDB.Panels.Add(, "year")
        pnlX.Width = 1000
        Set pnlX = sbrDB.Panels.Add(, "description")
        pnlX.AutoSize = sbrContents
    End If
        
    ' 打开 ADODB 记录集为状态栏获得数据。
    Dim rsTitles As New ADODB.Recordset
    Dim strQ As String
'    strQ = "SELECT Authors.Author, Titles.ISBN, Titles.[Year Published], " & _
'    "Titles.Description FROM Authors INNER JOIN (Titles INNER JOIN " & _
'    "[Title Author] ON " & _
'    "Titles.ISBN = [Title Author].ISBN) ON Authors.Au_ID = " & _
'    "[Title Author].Au_ID WHERE Titles.ISBN='" & ISBN & " '"
    strQ = "SELECT * FROM 用户电费 where 用户名称='" & ISBN & "'"

    ' 打开记录集。
    rsTitles.Open strQ, cn, adOpenStatic, adLockOptimistic
    
    ' 使用信息组织状态栏窗格。
    sbrDB.Panels("author").Text = rsTitles!用户名称
    sbrDB.Panels("ISBN").Text = rsTitles!地址
    If Not IsNull(rsTitles![抄表码]) Then
        sbrDB.Panels("year").Text = rsTitles![抄表码]
    Else
        sbrDB.Panels("year").Text = "n/a"
    End If
    If Not IsNull(rsTitles!全称) Then
        sbrDB.Panels("description").Text = rsTitles!全称
    Else
        sbrDB.Panels("description").Text = "n/a"
    End If
    If Not rsTitles.eof Then rsTitles.MoveNext
    ' 添加其他的作者名称。
    Do Until rsTitles.eof
        
        If Not IsNull(rsTitles!地址) Then
            sbrDB.Panels("author").Text = sbrDB.Panels("author").Text & _
            " & " & rsTitles!用户名称
        End If
        rsTitles.MoveNext
    Loop
    ' 设置 EventFlag 时窗格不被重新创建。
    EventFlag = TITLE
End Sub


Private Sub mnuExit_Click()
    Unload Me
End Sub

Private Sub mnuLoad_Click()
    Static Loaded As Boolean
    If Loaded = True Then
        Exit Sub
    Else
        cmdLoad_Click
        Loaded = Abs(Loaded - 1)
        mnuLoad.Enabled = False
    End If
End Sub

Private Sub tvwDB_Collapse(ByVal node As node)
    ' 只有文件夹中的节点可以被折叠。
    If node.Tag = "Publisher" Or node.Index = 1 Then node.Image = "closed"
End Sub

Private Sub tvwDB_Expand(ByVal node As node)
    ' 只有顶节点,和出版商节点可以被折叠。
    If node.Tag = "Publisher" Or node.Index = 1 Then
        node.Image = "open"
        node.Sorted = True
    End If
    If node.Tag = "Publisher" And EventFlag <> _
    PUBLISHER Then MakeColumns
    ' 如果标志为 "Publisher" 并且 mItemCurrentIndex
    ' 索引与 Node.key 不相同 , 那么
    ' 激活 GetTitles 函数。
    If node.Tag = "Publisher" And mCurrentIndex <> Val(node.Key) _
    Then GetTitles node, Val(node.Key)
    
    If node.Tag = "Publisher" Then PopStatus node

    node.Sorted = True

End Sub

Private Sub MakeColumns()
    ' 清除 ColumnHeaders 集合。
    lvwDB.ColumnHeaders.Clear
    ' 添加四个 ColumnHeaders。
    lvwDB.ColumnHeaders.Add , , "项目一", 2800
    lvwDB.ColumnHeaders.Add , , "项目二"
    lvwDB.ColumnHeaders.Add , , "项目三", 800
    lvwDB.ColumnHeaders.Add , , "项目四"
    
    ' 设置 EventFlag 变量使这个过程不要再三发生。
    EventFlag = PUBLISHER
End Sub
Private Sub AddListItemsOnly(pubID)
    Dim rsTitles As New ADODB.Recordset
    Dim newNode As node
    Dim strQ As String
    strQ = "SELECT * from 用户电费 where id=" & pubID
    
'    strQ = "SELECT Titles.Title, Authors.Author, Titles.ISBN, " & _
'    "Titles.[Year Published] FROM Authors INNER JOIN " & _
'    "(Titles INNER JOIN [Title Author] " & _
'    "ON Titles.ISBN = [Title Author].ISBN) ON Authors.Au_ID = " & _
'    "[Title Author].Au_ID WHERE Titles.PubID=" & pubID
    
    lvwDB.ListItems.Clear
    With rsTitles
        .Open strQ, cn, adOpenStatic, adLockReadOnly, adCmdText
        .MoveLast
        .MoveFirst
        prgLoad.Max = .RecordCount + 1
    End With
    
    ' 显示进程栏
    prgLoad.Visible = True

    Dim intCounter As Integer
    ' 创建子节点。
    

    ' 添加相应的 ListItem 。
    AddListItem mItem, rsTitles
    
    rsTitles.MoveNext
    ' 遍历记录集中的剩余记录。如果下一个记录是
    ' 一个副本,那么仅添加作者名称。
    ' 否则, 添加新的 Node 及 ListItem。
    Do Until rsTitles.eof
        intCounter = intCounter + 1 ' 作用于进程栏
        prgLoad.Value = intCounter  ' 更新进程。

        If mItem.Key = rsTitles!ISBN Then ' 副本
            ' 添加作者到作者列表。
            mItem.ListSubItems(1).Text = _
            mItem.ListSubItems(1).Text & _
            " & " & rsTitles!Author
        Else
            AddListItem mItem, rsTitles
        End If
        rsTitles.MoveNext
    Loop
    prgLoad.Visible = False
    mCurrentIndex = pubID
End Sub

Private Function GetTitles(ByRef ParentNode As node, pubID) As Boolean
    Dim rsTitles As New ADODB.Recordset
    Dim newNode As node ' 作为新的 Node.
    Dim strQ As String
    Dim intCounter As Integer ' 作为进程栏的值
    
    ' 检查节点是否没有被组织。如果已经被组织,那么
    ' 仅添加 ListItem 对象到 ListView 并且退出。
    If ParentNode.Children Then
        AddListItemsOnly pubID
        Exit Function
    End If
    
    ' 如果 ListView 已经被组织,则清除它。
    lvwDB.ListItems.Clear
    
    ' SQL Query 检索所有所需字段。
    strQ = "SELECT * from 用户电费 where id=" & pubID
    
'    strQ = "SELECT Titles.Title, Authors.Author, Titles.ISBN, " & _
'    "Titles.[Year Published] FROM Authors INNER JOIN " & _
'    "(Titles INNER JOIN [Title Author] " & _
'    "ON Titles.ISBN = [Title Author].ISBN) ON Authors.Au_ID = " & _
'    "[Title Author].Au_ID WHERE Titles.PubID=" & pubID
    
    ' 打开记录集。如果为空则退出。
    With rsTitles
        .Open strQ, cn, adOpenStatic, adLockReadOnly, adCmdText
        If .BOF Then
            ' 如果为空,返回 false 并退出。
            GetTitles = False
            Exit Function
        End If
        .MoveLast
        .MoveFirst
        prgLoad.Max = .RecordCount + 1
    End With
    
    ' 显示进程栏
    prgLoad.Visible = True
    
    On Error GoTo childErr
    ' 添加第一个节点。
    AddNode newNode, ParentNode, rsTitles
    ' 添加相应的 ListItem 。
    AddListItem mItem, rsTitles
    
    rsTitles.MoveNext
    
    ' 遍历记录集中的剩余记录。如果下一个记录是
    ' 一个副本,那么仅添加作者名称。
    ' 否则, 添加新的 Node 及 ListItem。
    Do Until rsTitles.eof
        intCounter = intCounter + 1 ' 作用于进程栏。
        prgLoad.Value = intCounter  ' 更新进程。

        ' 监察对应于当前 ISDN 的 Key 。 如果它们相同
        ' 那么此记录仅仅因包含不同的作者而不同。
        ' 那么添加作者到当前列表。
        If newNode.Key = rsTitles!ISBN Then
            ' 添加作者到作者列表。
            mItem.ListSubItems("author").Text = _
            mItem.ListSubItems("author").Text & _
            " & " & rsTitles!Author
        Else ' 添加新的 Node 和 ListItem
            AddNode newNode, ParentNode, rsTitles
            AddListItem mItem, rsTitles
        End If
        rsTitles.MoveNext
    Loop
    GetTitles = True ' 如果成功则返回 true
    
    prgLoad.Visible = False
    mCurrentIndex = pubID
    Exit Function
childErr:
        Debug.Print Err.Number, Err.Description
        
        'Debug.Print rsTitles!ISBN
        Resume Next
    
    Exit Function
End Function
Private Sub AddNode(ByRef newNode As node, ByRef ParentNode As node, ByRef rs As ADODB.Recordset)
    ' 添加新的节点。newNode 和 ParentNode 都是需要的。
    Set newNode = tvwDB.Nodes.Add(ParentNode, _
    tvwChild, rs!地址, rs!用户名称, "smlBook")
    newNode.Tag = "book"
End Sub
Private Sub AddListItem(ByRef xItem As ListItem, ByRef xRec As ADODB.Recordset)
    ' 添加 ListItem 设置它的文本, 图标及小图标。然后
    ' 添加三个 ListSubItems 为它们设置 Key 及 Text 。
    Set xItem = lvwDB.ListItems.Add(Key:=xRec!用户名称, _
    Text:=xRec!地址, Icon:="book", SmallIcon:="smlBook")

    xItem.ListSubItems.Add Key:="author", Text:=xRec!全称 & ""
    If Not IsNull(xRec![抄表码]) Then
        xItem.ListSubItems.Add Key:="year", Text:=xRec![抄表码]
    End If
    xItem.ListSubItems.Add Key:="isbn", Text:=xRec!组合编码
End Sub

Private Sub tvwDB_NodeClick(ByVal node As node)
    ' 为 "Publisher" 和 EventFlag 变量检查标志
    ' 看看是否 ColumnHeaders 已经被创建。
    ' 如果没有创建,那么激活 MakeColumns 过程。
    If node.Tag = "Publisher" And EventFlag <> _
    PUBLISHER Then MakeColumns
    ' 如果标志为 "Publisher" 并且 mItemCurrentIndex
    ' 索引与 Node.key 不相同, 那么
    ' 激活 GetTitles 函数, 它将组织 Node 。
    If node.Tag = "Publisher" And mCurrentIndex <> Val(node.Key) _
    Then GetTitles node, Val(node.Key)
    
    If node.Tag = "Publisher" Then PopStatus node
    node.Sorted = True
        
    ' 如果节点的标志是 "book" 那么确定通过使用 EnsureVisible
    ' 方法使点击的书目在 ListView 中是可见的
    If node.Tag = "book" Then
        Dim liBook As ListItem
        Set liBook = lvwDB.FindItem(node.Text)
       ' liBook.EnsureVisible
    End If
    
End Sub
 
Private Sub PopStatus(node As node)
    ' 只需更改状态栏来反映当前的值。
    With sbrDB
        .Panels.Clear
        .Panels.Add , "name", node.Text
        .Panels.Add , "number", node.Children & " titles"
        .Panels(1).AutoSize = sbrContents
        .Panels(2).AutoSize = sbrSpring
    End With
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -