Добавить целые в просмотр списка для сортировки - PullRequest
1 голос
/ 03 ноября 2010

У меня есть список и я пытаюсь отсортировать его по столбцу. У меня работает событие columnclick и т. Д., И оно сортируется, но у меня возникает следующая проблема:

Я не могу добавить элементы в список в виде целых чисел. Это проблема, как будто у меня есть столбец целых чисел, который мне нужно было использовать ToString(), сортировка ставит 10 перед 2.

Кто-нибудь знает, как я могу добавлять элементы как целые, чтобы сортировка имела желаемую функциональность. Кроме того, не все столбцы имеют тип int, есть некоторые строковые столбцы, и я бы хотел, чтобы сортировка работала и над ними.

Для справки, я использовал следующий учебник для кода сортировки: http://support.microsoft.com/kb/319401

Приветствия

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Вы можете создать класс сортировщика, который реализует IComparer, и назначить его свойству ListViewItemSorter объекта ListView.

У IComparer есть метод Compare.Два экземпляра ListViewItem передаются этому методу.Вам нужно прочитать значение столбца, затем разобрать его в int и вернуть правильный результат сравнения (основанный на int вместо основанного на строке).

Вы можете создать свой собственный класс ListViewItem, который создает строковое значение для столбца, нотакже содержит исходное значение int, чтобы избежать вызова int.Parse в компараторе.

Непроверенный пример:

public class MyItemComparer : IComparer
{
    public int Compare(object x, object y)
    {
        ListViewItem xItem = (ListViewItem)x;
        ListViewItem yItem = (ListViewItem)y;

        int a = int.Parse(xItem.SubItems[0]);
        int b = int.Parse(yItem.SubItems[0]);
        return a.CompareTo(b);
    }
}
1 голос
/ 03 ноября 2010

Вы можете определить, есть ли в выбранном столбце числа. Запишите это в функцию сравнения

            int intX = 0, intY = 0;
            if(int.TryParse(listviewX.SubItems[ColumnToSort].Text, out intX)
                && int.TryParse(listviewY.SubItems[ColumnToSort].Text, out intY))
            {
                return intX.CompareTo(inty);
            }

Возможно, проблема в том, что какой-то столбец содержит цифры и текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...