首先我定义了一个类TEmployee,它就是根据SQL server的Northwind中的Employee表;
类界面主要用Listview控件
然后定义一个Employee集合TSubEmployees,主要用来保存初始化Listview遍历数据库所有的Employee
Option Explicit
Public mcolEmployees As New Collection
'遍历数据库将每一条记录写入mcolEmployees集合内
Public Function InitEmployee()
   '创建新对象
   Dim objNewEmployee As New TEmployee
   '遍历数据库
   Dim rsEmployees As ADODB.Recordset
   Set rsEmployees = AdoSet("SELECT * from Employees ")
   '将每一条记录写入mcolEmployees集合内
   While Not rsEmployees.EOF
        '设置传入方法的属性
        With objNewEmployee
            .EmployeeID = rsEmployees.Fields("EmployeeID").Value
            .LastName = rsEmployees.Fields("LastName").Value
            .FirstName = rsEmployees.Fields("FirstName").Value
            .Title = rsEmployees.Fields("Title").Value
            .TitleOfCourtesy = rsEmployees.Fields("TitleOfCourtesy").Value
            .BirthDate = rsEmployees.Fields("BirthDate").Value
            .HireDate = rsEmployees.Fields("HireDate").Value
            .Address = rsEmployees.Fields("Address").Value
            .City = rsEmployees.Fields("City").Value
            .Region = rsEmployees.Fields("Region").Value
            .PostalCode = rsEmployees.Fields("PostalCode").Value
            .Country = rsEmployees.Fields("Country").Value
            .HomePhone = rsEmployees.Fields("HomePhone").Value
            .Extension = rsEmployees.Fields("Extension").Value
            .Notes = rsEmployees.Fields("Notes").Value
            .ReportsTo = rsEmployees.Fields("ReportsTo").Value
            .PhotoPath = rsEmployees.Fields("PhotoPath").Value
            mcolEmployees.Add objNewEmployee, "ID" & CStr(.EmployeeID)
        End With
        rsEmployees.MoveNext
    Wend
    '清空对象
    Set objNewEmployee = Nothing
End Function
但在界面初始化时出现了问题?
'初始化填充Listview
Private Sub InitLvw()
    '循环标志
    Dim intEmpNum As Integer
    '定义集合对象的变量
    Dim objSubEmployees As TSubEmployees
    '创建集合对象
    Set objSubEmployees = New TSubEmployees
    '调用集合对象的方法,遍历数据库填充到集合对象
    Call objSubEmployees.InitEmployee
    '遍历集合对象的子对象,写入Listview控件
    For Each objEmployee In objSubEmployees.mcolEmployees
        Set objItem = lvwEmployees.ListItems.Add
        With objEmployee
            objItem.key = "KEY" & CStr(.EmployeeID) '为什么KEY值会不唯一
            objItem.Text = .EmployeeID
            objItem.SubItems(1) = .LastName
            objItem.SubItems(2) = .FirstName
            objItem.SubItems(3) = .Title
            objItem.SubItems(4) = .TitleOfCourtesy
            objItem.SubItems(5) = .BirthDate
            objItem.SubItems(6) = .HireDate
            objItem.SubItems(7) = .Address
            objItem.SubItems(8) = .City
            objItem.SubItems(9) = .Region
            objItem.SubItems(10) = .PostalCode
            objItem.SubItems(11) = .Country
            objItem.SubItems(12) = .HomePhone
            objItem.SubItems(13) = .Extension
            objItem.SubItems(14) = ""
            objItem.SubItems(15) = .Notes
            objItem.SubItems(16) = .ReportsTo
            objItem.SubItems(17) = .PhotoPath
            Call ChangeMap
        End With
     Next
   '将集合对象设空
   Set objSubEmployees = Nothing
End Sub
老是提示objItem的KEY值不唯一;还有它只会连续显示最后一条记录,为什么前面的记录不会显示出来??????//?难道我只将最后一条记录添加到集合内去,不是吧?我不明白!!

解决方案 »

  1.   

    '循环标志
    Dim intEmpNum As Integer
    这二行是多余的忘记删除了
      

  2.   

    好像是key值没有确定哦,试试看这个循环
       For objItem.key =初始值 TO objSubEmployees.mcolEmployees的总数
            Set objItem = lvwEmployees.ListItems.Add
            With objEmployee
                objItem.key = "KEY" & CStr(.EmployeeID) '为什么KEY值会不唯一
                objItem.Text = .EmployeeID
                 .
                 .
                 .    Next
      

  3.   

    For objItem.key =初始值 TO objSubEmployees.mcolEmployees的总数
     next
    这里的objItem.key 是什么意思?
     For Each objEmployee In objSubEmployees.mcolEmployees
     next 
    我觉得这个循环好像没错吧?要是错了,请指出错在哪?
    谢谢指点!
      

  4.   

    mcolEmployees.Add objNewEmployee, "ID" & CStr(.EmployeeID)
    这个Add方法是如何的,我是照例子写的?
    如何操作mcolEmployees的子项?
      

  5.   

    objItem.key = "KEY" & CStr(.EmployeeID) '为什么KEY值会不唯一
    ==============================================================它也针对ListView的每一个子项.如这样写:
    objItem.SubItems(1) = .LastName & intEmpNum
    intEmpNum = intEmpNum + 1 '一定要动态改变Key值
      

  6.   

    junki(『.NET技术争霸天下』) ( 
    KEY值是集合子项的属性,不可能是相同的
    我的问题,主要是
     For Each objEmployee In objSubEmployees.mcolEmployees
     next 
    出现了问题,不能遍历集合对象的子对象,只能读取最后一个子项!奇怪???
      

  7.   

    //老是提示objItem的KEY值不唯一;还有它只会连续显示最后一条记录,为什么前面的记录不会显示出来??????//?难道我只将最后一条记录添加到集合内去,不是吧?我不明白!!检查一下你的游标类型