我可以使用LVM_INSERTITEM和LVM_SETITEM等Win API方法在ListView控件中添加项吗?
我想快速加载listview数据,我认为objListView.ListItems.add对于将大量行添加到listview中的速度很慢。
目前我使用以下代码添加ListItems:
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记录集]
答案 0 :(得分:1)
你可以这样做,但它可能不会让事情变得太快。您可能会发现使用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)等也可能会有明显的改进。运行时必须将字段名称字符串解析为Collection的偏移量,这是一个额外的步骤。编译器不了解数据库,因此它无法在编译时执行此操作。删除额外步骤时,可以消除性能开销。它是否足以产生影响可能值得测试。