Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)
  Dim i As Integer
  
  ' If (ListView1.SortKey = ColumnHeader.Index - 1) Then
    ColumnHeader.Tag = Not Val(ColumnHeader.Tag)
  End If
  
    ListView1.SortOrder = Abs(Val(ColumnHeader.Tag))
  
   ListView1.SortKey = ColumnHeader.Index - 1
  
   ListView1.Sorted = True
  
  
End Sub几百条数据 这样的排序数值自段出这种结果 降序类似
升序
1000
1001
2000
100
102
103
如何正确排序呢?错在哪里呢?

解决方案 »

  1.   

    ListView是当字符排序了,
    1000
    1001
    2000
    100
    102
    103
    要变成
    1000
    1001
    2000
    0100
    0102
    0103
    再排就自然OK了。
      

  2.   

    Dim lngIndex As Long
        
        '排序带数字的列
        If ColumnHeader.TEXT = "岗次" Then
            For lngIndex = 1 To lvwEmployee.ListItems.Count
                lvwEmployee.ListItems(lngIndex).SubItems(ColumnHeader.Index - 1) = Format(lvwEmployee.ListItems(lngIndex).SubItems(ColumnHeader.Index - 1), "000000000000")
            Next
        End If
        
        With lvwEmployee
            If (ColumnHeader.Index - 1) = .SortKey Then
                .SortOrder = (.SortOrder + 1) Mod 2
            Else
            .Sorted = False
            .SortOrder = 0
            .SortKey = ColumnHeader.Index - 1
            .Sorted = True
            End If
        End With
        
        If ColumnHeader.TEXT = "岗次" Then
            For lngIndex = 1 To lvwEmployee.ListItems.Count
                If lvwEmployee.ListItems(lngIndex).SubItems(ColumnHeader.Index - 1) = "000000000000" Then
                    lvwEmployee.ListItems(lngIndex).SubItems(ColumnHeader.Index - 1) = "0"
                Else
                    lvwEmployee.ListItems(lngIndex).SubItems(ColumnHeader.Index - 1) = Format(lvwEmployee.ListItems(lngIndex).SubItems(ColumnHeader.Index - 1), "###")
                End If
            Next
        End If偶以前的程序 参考下
    得格式化数据才能重排序
      

  3.   

    哦,我也发现格式化了才能排序
    原来是这样谢谢楼上
    可是数值原来是数值型的 , 不能让用户看到 变成 010 012吧
    看windows  的排序就正常.
      

  4.   

    如果不希望 在listview里看到000123这样得形式怎么办?
      

  5.   

    chinawcs() ( ) 信誉:100    Blog  2006-10-26 14:52:00  得分: 0  
     
     
       如果不希望 在listview里看到000123这样得形式怎么办?
      可以在Listview中增加一个宽度为0的列,所存储的值同上面的方法
    1000
    1001
    2000
    100
    102
    103
    要变成
    1000
    1001
    2000
    0100
    0102
    0103再按新增的列排序试试......
    没上机调试,楼主可以试一下
     
      

  6.   

    哈,也学到了,要不,总是感觉没有WIN自己的好用。
      

  7.   

    其实还可以用api回调函数排序,不过稳定性不利于调试
      

  8.   

    kmlxk(xiaoKKKK) 其实还可以用api回调函数排序,不过稳定性不利于调试=============================同意,我已經封裝成DLL了,可以按數字,日期,IP地址等排序。