jueves, 1 de marzo de 2018

Receta C# No. 7-10: Ordenar un Control ListView por Cualquier Columna

1. Problema

Ordenar un control ListView por cualquiera de las columnas disponibles.

2. Solución

En su defecto el método ListView.Sort efectúa un ordenamiento a partir de la primera columna; la solucion consiste en crear una implementación de IComparer (System.Collections) para ordenar con base en un criterio ListViewItem concreto.


Para lo anterior es necesario establecer la propiedad ListView.ListViewItemSorter con la implementación de IComparer. Esto debe efectuarse antes de invocar al método ListView.Sort (Jones, Freeman, 2010).

3. Código C#


La implementación del método Compare(object, object) (líneas 69-115) determina la forma de ordenar las columnas:
  • Líneas 71-72: Obtiene los elementos a comparar; éstos son convertidos a elementos ListViewItem.
  • Líneas 74-90: Lógica de comparación cuando los elementos a comparar contiene elementos null.
  • Líneas 92-107: Comprueba primero que los valores a comparar son numéricos. De ser así, se procede con la lógica de comparación: uso del método Decimal.Compare().
  • Líneas 108-114: Cuando el contenido a comparar es alfanumérico.
Prueba de ejecución:
Orden de columnas en ListView
Figura 1. Orden de columnas en ListView.

4. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.

O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.