首页 > 解决方案 > 按选中的项目排序列表视图

问题描述

我在表单上有一个 listview 控件,所有列的左侧都有一个隐藏列,我用它来正确排序数字。

我想对项目进行排序,以便首先检查项目。

这是我现在用来排序的代码,但它并没有为 Checked 项目做这项工作。

Private Sub lstProgramOrder_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With lstProgramOrder

    .SortKey = IIf(ColumnHeader.Index = 1, 1, ColumnHeader.Index - 2)
    If .SortOrder = lvwAscending Then
        .SortOrder = lvwDescending
    Else
        .SortOrder = lvwAscending
    End If
    .Sorted = True
End With
End Sub

标签: excelvbasortinglistview

解决方案


似乎按复选框排序并没有内置到列表视图中。您可以通过在复选框旁边添加另一个不可见的列来解决这个问题。您必须将此与复选框保持同步 - 这可以通过 be event 轻松完成ItemCheck(在您的情况下lstProgramOrder_ItemCheck)。

您只需要下定决心要在该新列中写入什么。我选择0为已选中和1未选中编写,以便将选中的项目排序到顶部。假设在复选框(索引 1)旁边添加了这个虚拟列:

Private Sub lstProgramOrder_ItemCheck(ByVal Item As MSComctlLib.ListItem)
    Item.ListSubItems(1) = IIf(Item.Checked, "0", "1")
End Sub

然后,在您的Column_Click-routine 中,您必须设置.SortKey为 1 ifColumnHeader.Index = 1


推荐阅读