Sortowanie kolumn, błędna interpretacja

0

Witam,

Takim kliknięciem na kolumnę:

listView1.ListViewItemSorter = new SortowanieKolumnWListView(e.Column);
            listView1.Sort();

Wywołuje sortowanie:

public class SortowanieKolumnWListView : IComparer
    {
        private int kolumna;
        public SortowanieKolumnWListView()
        {
            kolumna = 0;
        }
        public SortowanieKolumnWListView(int kol)
        {
            kolumna = kol;
        }
        public int Compare(object x, object y)
        {
            int zwrot = -1;
            zwrot = String.Compare(((ListViewItem)x).SubItems[kolumna].Text,
            ((ListViewItem)y).SubItems[kolumna].Text);
            return zwrot;
        }
    }

Sortowanie powiedzmy, że działa jednak w przypadku liczb popełnia wielki błąd. Podczas sortowania uzyskuje:

1
10
11
12
13
14
15
16
17
18
19
2
20
21
....
3
30
31
...

Jak rozwiązać ten problem?

0

Żadnego błędu nie ma, liczby traktujesz jako stringi, do ich porównywania używasz String.Compare, więc sam tu wymuszasz sortowanie leksykograficzne.
Traktuj liczby jako liczby i tak je sortuj, wtedy nie będzie problemu.

0

Ewentualnie jeżeli napisy też będą to poszukaj w Googlach czegoś takiego jak sortowanie naturalne.

0

A jak zmienić mój kod, żeby zastosować sortowanie naturalne?

0
 public int Compare(object x, object y)
        {
            return Math.Sign((int)x-(int)y);
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1