ListView控件的排序问题

evancss 2004-10-11 02:42:59
我的ListView控件中第一列ID全部是数字,我想让listView按数值大小排序

lvMy.Sorted=True
lvMy.SortKey=0
lvMy.SortOrder = lvwAscending

用上面的代码得到的排序结果是按字符来的,如:

1
11
12
2
23
25
32
35
4
5
6
7
8

怎样才能让listView控件按照数值大小排序呢?
...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanexp 2004-12-17
  • 打赏
  • 举报
回复
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)
Dim currSortKey As Integer
ListView1.SortKey = ColumnHeader.Index - 1
currSortKey = ListView1.SortKey
ListView1.SortOrder = Abs(Not ListView1.SortOrder = 1)
ListView1.Sorted = True

If currSortKey > -1 Then

prevOrder% = currSortKey
End If
End Sub
homezj 2004-11-07
  • 打赏
  • 举报
回复
很巧,这种问题我遇过,根本原因是listView的自动排序只能基于字符串。打开了listView的自动排序,再用排序函数与sql语句里面加上排序,都是没有用的。
为什么要用自动排序呢,可能楼主与我的想法一样,就是想达到资源管理器中按详细资料查看时那样的效果,点击某个列头便可按这列正或倒序排列。
我也发现Format(i, "0000000")的方法有效,但总会让数值前多出一些"0",看得很不舒服,其实换个符号就行了,Format(i, "@@@@@@"),其中“@”个数就是你预计数值可能的最大长度。

这里还有个问题,就是负数会影响排度结果,若你的数值可能出现负数的话,可改成这样:
If i < 0 Then
.Text = Format(-i, "\-@@@@@@")
Else
.Text = Format(i, "\+@@@@@@")
End If
这样做,会让数值列的最左边多出个符号,我觉得倒也直观,就是不知别人是否认为可以接受了。
tlzhu 2004-11-07
  • 打赏
  • 举报
回复
自己写一个排序函数。
zhoujiamurong 2004-11-07
  • 打赏
  • 举报
回复
我也遇到
guxizhw 2004-10-11
  • 打赏
  • 举报
回复
sql语句里面写上order by id
不让用户排序
就可以
leolan 2004-10-11
  • 打赏
  • 举报
回复
1.在ListView裡新增一隱藏列(寬度為0)用於排序,在寫數據至ListView時對數據進行格式化,e.g. Format$(32, "0000000"),放入隱藏列中.

lvMy.Sorted=True
if columnheader.index = 0 then
lvMy.SortKey=隱藏列的index -1
else
lvMy.SortKey=columnheader.index -1
end if
lvMy.SortOrder = lvwAscending
evancss 2004-10-11
  • 打赏
  • 举报
回复
有人知道没?

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧