// Пример из статьи How to: Sort ListView Items (msdn.microsoft.com)

// Экземпляр класса SortWrapper создается
// для каждого элемента и добавляется к ArrayList для сортировки
using System.Collections;
using System.Windows.Forms;

public class SortWrapper
{
    internal ListViewItem sortItem;
    internal int sortColumn;


    // Для SortWrapper необходимо указать элемент списка и индекс выбранной колонки
    public SortWrapper(ListViewItem Item, int iColumn)
    {
        sortItem = Item;
        sortColumn = iColumn;
    }

    // Свойство Text для получения текста элемента
    public string Text
    {
        get
        {
            return sortItem.SubItems[sortColumn].Text;
        }
    }

    // Реализация интерфейса IComparer
    // для сортировки элементов ArrayList
    public class SortComparer : IComparer
    {
        bool ascending;

        // В конструкторе необходимо указать порядок сортировки
        // true - если по возрастанию, иначе - по убыванию.
        public SortComparer(bool asc)
        {
            this.ascending = asc;
        }

        // Реализация метода IComparer:Compare
        // для сравнения двух объектов
        public int Compare(object x, object y)
        {
            SortWrapper xItem = (SortWrapper)x;
            SortWrapper yItem = (SortWrapper)y;

            string xText = xItem.sortItem.SubItems[xItem.sortColumn].Text;
            string yText = yItem.sortItem.SubItems[yItem.sortColumn].Text;
            return xText.CompareTo(yText) * (this.ascending ? 1 : -1);
        }
    }
}

