首先我定义了一个类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值不唯一;还有它只会连续显示最后一条记录,为什么前面的记录不会显示出来??????//?难道我只将最后一条记录添加到集合内去,不是吧?我不明白!!
类界面主要用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值不唯一;还有它只会连续显示最后一条记录,为什么前面的记录不会显示出来??????//?难道我只将最后一条记录添加到集合内去,不是吧?我不明白!!
Dim intEmpNum As Integer
这二行是多余的忘记删除了
For objItem.key =初始值 TO objSubEmployees.mcolEmployees的总数
Set objItem = lvwEmployees.ListItems.Add
With objEmployee
objItem.key = "KEY" & CStr(.EmployeeID) '为什么KEY值会不唯一
objItem.Text = .EmployeeID
.
.
. Next
next
这里的objItem.key 是什么意思?
For Each objEmployee In objSubEmployees.mcolEmployees
next
我觉得这个循环好像没错吧?要是错了,请指出错在哪?
谢谢指点!
这个Add方法是如何的,我是照例子写的?
如何操作mcolEmployees的子项?
==============================================================它也针对ListView的每一个子项.如这样写:
objItem.SubItems(1) = .LastName & intEmpNum
intEmpNum = intEmpNum + 1 '一定要动态改变Key值
KEY值是集合子项的属性,不可能是相同的
我的问题,主要是
For Each objEmployee In objSubEmployees.mcolEmployees
next
出现了问题,不能遍历集合对象的子对象,只能读取最后一个子项!奇怪???