mlistviewloader.bas

来自「一个关于电脑管理汽车的软件」· BAS 代码 · 共 125 行

BAS
125
字号
Attribute VB_Name = "mListviewLoader"
'---------------------------------------------------------------------------------------
' Module    : mListviewLoader
' DateTime  : 03/07/04 14:06
' Author    : Robert Rowe
' Purpose   : Modified to work with VBMySQLDirect
'---------------------------------------------------------------------------------------
'
'    Copyright 2003 Mike Hillyer (www.vbmysql.com)
'
' Module    : mListviewLoader
' DateTime  : November 27, 2003
' Author    : MIKE HILLYER
' Purpose   : See ListViewLoad Sub

Option Explicit
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const LVM_SETITEMCOUNT As Long = 4096 + 47
 
Public Sub ListViewLoad(lvwData As Control, rs As MYSQL_RS, Optional Owner As Variant = 0)
'---------------------------------------------------------------------------------------
' Procedure : ListViewLoad
' DateTime  : 03/07/04 14:09
' Author    : Robert Rowe
' Purpose   : Modified to work with VBMySQLDirect
'---------------------------------------------------------------------------------------

'THIS FUNCTION IS USED TO TAKE DATA FROM A ADODB RECORDSET AND LOAD IT INTO
'A LISTVIEW CONTROL. PLACING A PROGRESS BAR NAMED pbrProgress ON OWNER FORM
'WILL ALLOW FOR AN UPDATING PROGRESS BAR TO SHOW HOW FAR ALONG YOU ARE WHEN
'OWNER PARAMETER IS SPECIFIED DURING CALL.
'
'NOTE: LISTVIEWS ARE NOT VERY EFFICIENT WITH MEMORY, AND THIS FUNCTION
'IS NOT RECCOMENDED FOR RECORDSETS WITH > 10,000 RECORDS
'
'AUTHOR: MIKE HILLYER
'
'USAGE: ListViewLoad lvwMyListView, rsMyRecordset[, me]
 
    On Error Resume Next
     
    Dim lngCounter As Long
     
    Dim FirstColumn As Boolean
    Dim TempRS As New MYSQL_RS
    Dim TempStr As String
    Dim TempLow As Long
    Dim TempCount As Long
    Dim TempSQL As String
    'FirstColumn = lvwData.Sorted
    lvwData.View = lvwReport                    'THESE PARAMETERS CREATE
    lvwData.LabelEdit = lvwManual               'A DATAGRID-LIKE APPEARANCE
    lvwData.GridLines = True
    lvwData.FullRowSelect = True
     
    lvwData.ListItems.Clear
    lvwData.ColumnHeaders.Clear
    
    TempLow = 0
    TempCount = 0
    TempSQL = "Select * From chinesetable " 'where englishname = " & Quote(TempStr)
    Set TempRS = gCnn.Execute(TempSQL)
    For lngCounter = 0 To rs.FieldCount - 1
        TempStr = rs.Fields(lngCounter).Name
       With rs.Fields(lngCounter + 1)
        If TempStr = "AKey" Or TempStr = "typebs" Or ((TempStr = "billnum" Or TempStr = "drawbillnum") And ((.Name = "goodscoding") Or (.Name = "itemcode") Or (.Name = "datacontxt"))) Then
          If ((.Name = "goodscoding") Or (.Name = "itemcode") Or (.Name = "datacontxt")) And (TempStr = "billnum" Or TempStr = "drawbillnum") Then TempLow = TempLow + 1
         If TempStr = "AKey" Then TempLow = TempLow + 1
        Else
         With TempRS
          .MoveFirst
          .MovePrevious
          .FindNext "englishname", TempStr
          lvwData.ColumnHeaders.Add , , .Fields(2).Value
         End With
         TempCount = TempCount + 1
        End If
      End With
    Next
    TempRS.CloseRecordset
    TempRS.ReleaseMemory
    Set TempRS = Nothing
 
    'PREALLOCATE MEMORY FOR ROWS
    SendMessage lvwData.hWnd, LVM_SETITEMCOUNT, TempCount, 0&
     
    Dim MyItems As MSComctlLib.ListItems
    Set MyItems = lvwData.ListItems
     
    Do Until rs.EOF
        FirstColumn = True      'FIRST COLUMN IS A LISTITEM, REST ARE LISTSUBITEMS
        For lngCounter = TempLow To rs.FieldCount - 1
          If rs.Fields(lngCounter).Name <> "typebs" Then
            If FirstColumn Then
                If Not IsNull(rs.Fields(lngCounter).Value) Then
                    MyItems.Add , , rs.Fields(lngCounter).Value
                Else
                    MyItems.Add , , ""  'NULL FIELDS NEED A BLANK ITEM
                End If                  'TO KEEP DATA FROM SHIFTING LEFT
                FirstColumn = False
            Else
                If Not IsNull(rs.Fields(lngCounter).Value) Then
                    MyItems(MyItems.Count).ListSubItems.Add , , rs.Fields(lngCounter).Value
                Else
                    MyItems(MyItems.Count).ListSubItems.Add , , ""
                End If
            End If
          End If
        Next
        'If Not IsMissing(Owner) Then Owner.pbrProgress.Value = (rs.AbsolutePosition / rs.RecordCount) * 100
        rs.MoveNext
    Loop
    If Owner = 0 Then
     If MyItems.Count > 1 Then
      lvwData.SortKey = 0
      lvwData.SortOrder = 0
      lvwData.Sorted = True
     ' lvwData.Sorted = False
      'FirstColumn = lvwData.Sorted
     End If
    End If
    ' If Asc(left(MyItems.Item(0).Text, 1)) > 125 Then
      
End Sub

⌨️ 快捷键说明

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