使用 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) 等也可能会得到显着改善。运行时必须将字段名称字符串解析为集合的偏移量,这是一个额外的步骤。编译器不知道数据库,所以它不能在编译时这样做。当您删除额外的步骤时,您就删除了性能开销。是否足以产生影响可能值得测试。