使用 LVM_INSERTITEM 和 LVM_SETITEM 插入 ListItem
Using LVM_INSERTITEM and LVM_SETITEM to insert ListItem
我可以使用 Win API 方法(例如 LVM_INSERTITEM 和 LVM_SETITEM 在 ListView 控件中添加项目吗?
我想快速加载列表视图数据,我认为 objListView.ListItems.add 对于要添加到列表视图中的大量行来说速度很慢。
目前我使用以下代码添加列表项:
Dim tmpLI as ListItem
Set tmpLI = ListView1.ListItems.Add text:="Item" & iCounter
tmpLI.SubItems(1) = objRs("StudentCode")
tmpLI.SubItems(2) = objRs("StudentName")
tmpLI.SubItems(3) = objRs("MotherName")
tmpLI.SubItems(4) = objRs("FatherName")
tmpLI.SubItems(5) = objRs("PhoneNo")
etc.
tmpLI.SubItems(15) = objRs("Description")
[iCounter是一个循环变量,objRs是ADODB Recordset]
你可以这样做,但它可能不会加快太多速度。不过,您可能会发现使用 With 块会给您带来更好的结果。像这样:
With ListView1.ListItems
.Add text:="Item" & iCounter
.SubItems(1) = objRs("StudentCode")
.SubItems(2) = objRs("StudentName")
.SubItems(3) = objRs("MotherName")
.SubItems(4) = objRs("FatherName")
.SubItems(5) = objRs("PhoneNo")
etc.
.SubItems(15) = objRs("Description")
End With
之所以更快,是因为您只需在 With 块的顶部解析一次对象引用,而不是每行代码解析一次。
使用 objRs.Fields(0)、objRs.Fields(1) 等也可能会得到显着改善。运行时必须将字段名称字符串解析为集合的偏移量,这是一个额外的步骤。编译器不知道数据库,所以它不能在编译时这样做。当您删除额外的步骤时,您就删除了性能开销。是否足以产生影响可能值得测试。
我可以使用 Win API 方法(例如 LVM_INSERTITEM 和 LVM_SETITEM 在 ListView 控件中添加项目吗?
我想快速加载列表视图数据,我认为 objListView.ListItems.add 对于要添加到列表视图中的大量行来说速度很慢。
目前我使用以下代码添加列表项:
Dim tmpLI as ListItem
Set tmpLI = ListView1.ListItems.Add text:="Item" & iCounter
tmpLI.SubItems(1) = objRs("StudentCode")
tmpLI.SubItems(2) = objRs("StudentName")
tmpLI.SubItems(3) = objRs("MotherName")
tmpLI.SubItems(4) = objRs("FatherName")
tmpLI.SubItems(5) = objRs("PhoneNo")
etc.
tmpLI.SubItems(15) = objRs("Description")
[iCounter是一个循环变量,objRs是ADODB Recordset]
你可以这样做,但它可能不会加快太多速度。不过,您可能会发现使用 With 块会给您带来更好的结果。像这样:
With ListView1.ListItems
.Add text:="Item" & iCounter
.SubItems(1) = objRs("StudentCode")
.SubItems(2) = objRs("StudentName")
.SubItems(3) = objRs("MotherName")
.SubItems(4) = objRs("FatherName")
.SubItems(5) = objRs("PhoneNo")
etc.
.SubItems(15) = objRs("Description")
End With
之所以更快,是因为您只需在 With 块的顶部解析一次对象引用,而不是每行代码解析一次。
使用 objRs.Fields(0)、objRs.Fields(1) 等也可能会得到显着改善。运行时必须将字段名称字符串解析为集合的偏移量,这是一个额外的步骤。编译器不知道数据库,所以它不能在编译时这样做。当您删除额外的步骤时,您就删除了性能开销。是否足以产生影响可能值得测试。