Ordenação do Listvi...
 
Notifications
Clear all

Ordenação do Listview personalizado

4 Posts
2 Usuários
0 Reactions
1,132 Visualizações
depoisteconto
(@depoisteconto)
Posts: 183
Estimable Member
Topic starter
 

Caros,

Pergunto se seria possível ordenar o Listview com critérios personalizados. Ex:

No listview tenho as seguintes colunas, gerando os seguintes resultados;

A, B, C
k,u,w
u,t,h
t,u,w
w,y,z
f,g,h
d,e,h
y,t,z

Minha idéia era ordenar pela coluna C, a começar pelos resultados z, depois por h e por fim w.

O resultado ficaria assim:

A, B, C
w,y,z
y,t,z
u,t,h
f,g,h
d,e,h
k,u,w
t,u,w

Lembro que assim como no exemplo, estou tratando Strings.
Tem jeito galera?

At

 
Postado : 12/08/2013 2:10 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Enquanto isso..tente adaptar

Sub SortListBox(oLb As MSForms.ListBox, sCol As Integer, sType As Integer, sDir As Integer)
    Dim vaItems As Variant
    Dim i As Long, j As Long
    Dim c As Integer
    Dim vTemp As Variant
     
    
    vaItems = oLb.List
     
    
    If sType = 1 Then
        For i = LBound(vaItems, 1) To UBound(vaItems, 1) - 1
            For j = i + 1 To UBound(vaItems, 1)
                 
                If sDir = 1 Then
                    If vaItems(i, sCol) > vaItems(j, sCol) Then
                        For c = 0 To oLb.ColumnCount - 1
                            vTemp = vaItems(i, c)
                            vaItems(i, c) = vaItems(j, c)
                            vaItems(j, c) = vTemp
                        Next c
                    End If
                     
                     
                ElseIf sDir = 2 Then
                    If vaItems(i, sCol) < vaItems(j, sCol) Then
                        For c = 0 To oLb.ColumnCount - 1
                            vTemp = vaItems(i, c)
                            vaItems(i, c) = vaItems(j, c)
                            vaItems(j, c) = vTemp
                        Next c
                    End If
                End If
                 
            Next j
        Next i
      
    ElseIf sType = 2 Then
        For i = LBound(vaItems, 1) To UBound(vaItems, 1) - 1
            For j = i + 1 To UBound(vaItems, 1)
             
                If sDir = 1 Then
                    If CInt(vaItems(i, sCol)) > CInt(vaItems(j, sCol)) Then
                        For c = 0 To oLb.ColumnCount - 1
                            vTemp = vaItems(i, c)
                            vaItems(i, c) = vaItems(j, c)
                            vaItems(j, c) = vTemp
                        Next c
                    End If
                     
                    
                ElseIf sDir = 2 Then
                    If CInt(vaItems(i, sCol)) < CInt(vaItems(j, sCol)) Then
                        For c = 0 To oLb.ColumnCount - 1
                            vTemp = vaItems(i, c)
                            vaItems(i, c) = vaItems(j, c)
                            vaItems(j, c) = vTemp
                        Next c
                    End If
                End If
                 
            Next j
        Next i
    End If
     
     
    oLb.List = vaItems
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/08/2013 8:01 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi corretamente, então veja se a rotina abaixo ajuda :

É classificado de acordo com o Rotulo da coluna que clicar.

'Ordena pela Coluna Clicada
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
     With ListView1
        If .SortKey = ColumnHeader.Index - 1 Then
           If .SortOrder = lvwAscending Then
              .SortOrder = lvwDescending
           Else
              .SortOrder = lvwAscending
           End If
        Else
           .SortKey = ColumnHeader.Index - 1
        End If
         .Sorted = True
    End With
  
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/08/2013 5:40 am
depoisteconto
(@depoisteconto)
Posts: 183
Estimable Member
Topic starter
 

Caros,

Alexandre,

Obrigado pela resposta. Pra mim sua alternativa foi mais avançada do que meu conhecimento, até mesmo para adaptar gastaria horas até entender corretamente o código e então poder adaptar.

Mauro,

Obrigado pela resposta. Alternativa mais simples, de entender e adaptar. Gostei.

Valeu.

 
Postado : 13/08/2013 9:06 am