Hola, Hombre de Maiz.
Un posible método que creo que podría resultar positivamente, sería formatear los valores numéricos.
Si no me equivoco, el ListViewer (igual que el ListBox, más simple) ordena sus elementos de forma alfabética y no según el valor numérico de cada elemento.
Me explicaré. Teniendo los siguientes 3 elementos: 123, 14, 1123.
El ListViewer los ordenaría así:
1123
123
14
Esto es, por orden alfabético.
La solución que yo propongo: formatear cada valor a un número determinado de 0. Este número de 0 debe ser el número máximo de cifras que puede llegar a tener un número. Imaginemos que lo establecemos a 10.
Utilizando esta función, nos devolverá el número formateado a un número de 0 determinado:
Public Function FormatToZeros(Number As Double,Optional NumZeros As Integer)As String
FormatToZeros=Format(CStr(Number),String(NumZeros,"0"))
End Function
Esta función toma un valor numérico y un número de 0 determinado al cual se formaterá, devolviendo una cadena de texto.
Ejemplo:
Dim R As String
R = FormatToZeros(123,5)
'Aquí R es igual a "00123"
Lo único que queda hacer ahora es establecer la propiedad Sorted de nuestro ListView a True (para ordenar los elementos alfabéticamente) y, cada vez que añadimos un nuevo elemento al ListView, formatearlo previamente con la función mencionada arriba. Hecho esto, los elementos deberían quedar debidamente ordenados y todo prescindiendo de la utilización de un método de ordenación: de eso se encarga el control mismo. Simple, ¿verdad?
Así, los elementos anteriormente ordenados de forma alfabética quedarían ahora así (formateados a 5 ceros):
00014
00123
01123
Completamente ordenados.
Espero que esta respuesta te haya sido de ayuda y te anime a seguir participando en el Foro. Si tienes alguna duda, consúltala aquí.
Hasta pronto,
Zoto