''' <summary>
''' Ordena los Items de un ListView segun la columna que se le pase y el tipo de dato
''' </summary>
''' <remarks>Coded by Krnl64 '08</remarks>
Public Class Comparador
Implements System.Collections.IComparer
''' <summary>
''' Tipo de Dato y Orden
''' </summary>
Public Enum metodo
''' <summary>
''' Texto en orden Ascendente
''' </summary>
TextoAsc
''' <summary>
''' Texto en orden Descendente
''' </summary>
TextoDesc
''' <summary>
''' DNI's sin tener en cuenta la letra Ascencente
''' </summary>
DNIAsc
''' <summary>
''' DNI's sin tener en cuenta la letra Descendente
''' </summary>
DNIDesc
''' <summary>
''' Fechas en orden Ascendente
''' </summary>
FechaAsc
''' <summary>
''' Fechas en orden Descendente
''' </summary>
FechaDesc
''' <summary>
''' Numeros en orden Ascendente
''' </summary>
''' <remarks></remarks>
NumeroAsc
''' <summary>
''' Numeros en orden Descendente
''' </summary>
NumeroDesc
End Enum
Private ordenar As metodo
Private col As Integer
''' <summary>
''' Constructor
''' </summary>
''' <param name="columna">Entero que especifica la columna del Listview a ordenar</param>
''' <param name="datasort">Tipo de dato a ordenar y la forma</param>
Public Sub New(ByVal columna As Integer, ByVal datasort As metodo)
ordenar = datasort
col = columna
End Sub
''' <summary>
''' Comparador de varios tipos de datos
''' </summary>
''' <param name="x">Cualquier tipo de dato Soportado (Object)</param>
''' <param name="y">Cualquier tipo de dato Soportado (Object)</param>
''' <returns>Resultado de la comparacion</returns>
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Select Case ordenar
Case metodo.TextoAsc
Return (String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text))
Case metodo.TextoDesc
Return (String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text))
Case metodo.DNIAsc ' Puede parecer complicao pero lo que hace es coger el nº del dni sin letra y lo compara
Return (CType(x, ListViewItem).SubItems(col).Text.Substring(0, CType(CType(x, ListViewItem).SubItems(col).Text.Length - 1, Integer)) - CType(y, ListViewItem).SubItems(col).Text.Substring(0, CType(CType(y, ListViewItem).SubItems(col).Text.Length - 1, Integer)))
Case metodo.DNIDesc
Return (CType(y, ListViewItem).SubItems(col).Text.Substring(0, CType(CType(y, ListViewItem).SubItems(col).Text.Length - 1, Integer)) - CType(x, ListViewItem).SubItems(col).Text.Substring(0, CType(CType(x, ListViewItem).SubItems(col).Text.Length - 1, Integer)))
Case metodo.NumeroAsc
Return (CInt(CType(x, ListViewItem).SubItems(col).Text) - CInt(CType(y, ListViewItem).SubItems(col).Text))
Case metodo.NumeroDesc
Return (CInt(CType(y, ListViewItem).SubItems(col).Text) - CInt(CType(x, ListViewItem).SubItems(col).Text))
Case metodo.FechaAsc
Return (DateTime.Compare(DateTime.Parse(CDate(CType(x, ListViewItem).SubItems(col).Text)), DateTime.Parse(CDate(CType(y, ListViewItem).SubItems(col).Text))))
Case metodo.FechaDesc
Return (DateTime.Compare(DateTime.Parse(CDate(CType(y, ListViewItem).SubItems(col).Text)), DateTime.Parse(CDate(CType(x, ListViewItem).SubItems(col).Text))))
End Select
End Function
''' <summary>
''' Destructor
''' </summary>
Protected Overrides Sub Finalize()
ordenar = 0
col = 0
MyBase.Finalize()
End Sub
End Class