Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ordenar Listview

Estas en el tema de Ordenar Listview en el foro de Visual Basic clásico en Foros del Web. Hola amigos!! pues eso, que tengo un Listview con 3 columnas y quiero que ordene por la primera pero me lo ordena como string, y ...
  #1 (permalink)  
Antiguo 19/11/2008, 03:41
Avatar de rulsanchez  
Fecha de Ingreso: octubre-2008
Ubicación: Manchester
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Ordenar Listview

Hola amigos!! pues eso, que tengo un Listview con 3 columnas y quiero que ordene por la primera pero me lo ordena como string, y yo quiero que lo ordene como numérico, y no soy capaz de arreglarlo.
Muchisimas gracias por su interés y por leerme.
Un saludo foreros ;)
  #2 (permalink)  
Antiguo 19/11/2008, 04:18
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Ordenar Listview

Cita:
Iniciado por rulsanchez Ver Mensaje
Hola amigos!! pues eso, que tengo un Listview con 3 columnas y quiero que ordene por la primera pero me lo ordena como string, y yo quiero que lo ordene como numérico, y no soy capaz de arreglarlo.
Muchisimas gracias por su interés y por leerme.
Un saludo foreros ;)
Hola! mira, un truco es convertir el número a string, ordenarlo y volverlo a convertir a número.

Código:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Integer
With ListView1
    .SortOrder = IIf(.SortOrder = lvwAscending, lvwDescending, lvwAscending)
    If ColumnHeader.Index = 1 Then ' primera columna
        ' convertir el número a una cadena de 20 caracteres
        For i = 1 To .ListItems.Count
            .ListItems.Item(i) = String(20 - Len(.ListItems.Item(i)), "0") & .ListItems.Item(i)
        Next i
        ' ordenarlo
        .Sorted = True
        ' restaurar formato número
        For i = 1 To .ListItems.Count
            .ListItems.Item(i) = Val(.ListItems.Item(i))
        Next i
    End If
    ' seleccionar la 1ª fila
    .ListItems(1).Selected = True
    .ListItems(1).EnsureVisible
End With
End Sub
Saludos
  #3 (permalink)  
Antiguo 19/11/2008, 04:44
Avatar de rulsanchez  
Fecha de Ingreso: octubre-2008
Ubicación: Manchester
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Ordenar Listview

Hola Avellaneda, funciona perfectamente, pero no entiendo su funcionamiento, quiero decir, si tengo que ordenar por numero.....¿Porqué lo pasas a string primero y luego lo ordenas?, si lo haces asi tendria que ordenarte esto--->> 5-23-1 así 1-23-5 porque son string....es lo que no entiendo, me lo podrias explicar?

Perdón por las molestias Avellaneda :(
  #4 (permalink)  
Antiguo 19/11/2008, 06:04
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Ordenar Listview

Cita:
Iniciado por rulsanchez Ver Mensaje
Hola Avellaneda, funciona perfectamente, pero no entiendo su funcionamiento, quiero decir, si tengo que ordenar por numero.....¿Porqué lo pasas a string primero y luego lo ordenas?, si lo haces asi tendria que ordenarte esto--->> 5-23-1 así 1-23-5 porque son string....es lo que no entiendo, me lo podrias explicar?

Perdón por las molestias Avellaneda :(

Hola rulsanchez

La propiedad Sorted del control ListView siempre ordena alfabéticamente (como cadenas de texto).

y en tu ejemplo:
5-23-1 ordenaría 1-23-5

pero si pones
005-023-001 ordenaría 001-005-023 que si lo convertimos a número sería 1-5-23

En conclusión, lo que hacemos es ponerle una cantidad de ceros por delante (x - los que tiene el número) para que haga bien la ordenación.

  #5 (permalink)  
Antiguo 19/11/2008, 06:28
Avatar de rulsanchez  
Fecha de Ingreso: octubre-2008
Ubicación: Manchester
Mensajes: 64
Antigüedad: 15 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Ordenar Listview

Te mereces un diez!!! Muchisimas gracias por todo Avellaneda, no solo me ha salido, sino que me lo has explicado muy bien y lo he entendido.
Mil gracias compañero!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:13.