按选中的项目对列表视图排序

时间:2018-11-19 01:11:05

标签: excel vba excel-vba sorting listview

我在表单上有一个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

1 个答案:

答案 0 :(得分:0)

看来,按复选框排序不是建立在列表视图中。您可以通过在复选框旁边添加另一个不可见的列来解决该问题。您必须使其与复选框保持同步-这可以通过事件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例程中,如果.SortKey

,则必须将ColumnHeader.Index = 1设置为1。