使用LVM_INSERTITEM和LVM_SETITEM插入ListItem

时间:2015-08-08 18:29:31

标签: api listview vb6

我可以使用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记录集]

1 个答案:

答案 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的偏移量,这是一个额外的步骤。编译器不了解数据库,因此它无法在编译时执行此操作。删除额外步骤时,可以消除性能开销。它是否足以产生影响可能值得测试。