Ordenar las columnas de un ListView pulsando en sus títulos
Artículo por Club Developers · 11 mayo 2006
2381 vistas
La clase ListView tiene una propiedad ListViewItemSorter de tipo IComparer. Ésta permite implementar su propia gestión de ordenación.
Para hacerlo, tendremos que crear una clase que derive de IComparer implmentando el método Compare.
Ahora tendremos que interceptar el clic en las columnas (evento ColumnClick) y instanciar esta clase.
Nota: se ha hecho una comparación de cadenas. La implementación será distinta si queremos comparar números por ejemplo.
Para hacerlo, tendremos que crear una clase que derive de IComparer implmentando el método Compare.
vbnet
Class ListViewItemComparer Implements IComparer Private col As Integer Private sortOrder As SortOrder Public Sub New() col = 0 sortOrder = Windows.Forms.SortOrder.Ascending End Sub Public Sub New(ByVal column As Integer) col = column sortOrder = Windows.Forms.SortOrder.Ascending End Sub Public Sub New(ByVal column As Integer, ByVal s As SortOrder) col = column sortOrder = s End Sub Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare If sortOrder = Windows.Forms.SortOrder.Ascending Then Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) Else Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text) End If End Function End Class
Ahora tendremos que interceptar el clic en las columnas (evento ColumnClick) y instanciar esta clase.
vbnet
Private Sub ListView1_ColumnClick(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick If Me.ListView1.Sorting = SortOrder.Ascending Then Me.ListView1.Sorting = SortOrder.Descending Else Me.ListView1.Sorting = SortOrder.Ascending End If Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListView1.Sorting) End Sub
Nota: se ha hecho una comparación de cadenas. La implementación será distinta si queremos comparar números por ejemplo.


