Coucou les gens.
Un problème se pose de nouveau sur mon histoire de listview (si ça continue je vais connaître le contrôle par coeur).
Aujourd'hui, le problème c'est au niveau du tri.
Comme expliqué sur le msdn j'ai copié/collé un bout de code qui permet le tri de mes colonnes https://msdn.microsoft.com/en-us/library/ms996467.aspx
Le truc c'est que ça compare QUE en string. Du coup, comme certaines de mes colonnes contiennent du float, j'ai modifié le tri par date proposé en fin d'article par cette chose :
Cependant lorsque je tri autre chose que du float; ça met un temps HORRIBLEMENT GRAND (et encore il n'y a qu'une trentaine de listviewitem à trier).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public int Compare(object x, object y) { int returnVal = -1; try { float firstnumber = float.Parse(((ListViewItem)x).SubItems[col].Text); float secondnumber = float.Parse(((ListViewItem)y).SubItems[col].Text); if (firstnumber > secondnumber) returnVal = 1; else if (firstnumber < secondnumber) returnVal = -1; else returnVal = 0; } catch { returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); } // Determine whether the sort order is descending. if (order == SortOrder.Descending) // Invert the value returned by String.Compare. returnVal *= -1; return returnVal; }
Donc la question est :
- Est-il possible de détecter et retyper le contenue sans passer par le try/catch, pour optimiser le tri de manière plus générale (datetime, int, float, ...) ?
Merci d'avance de vos réponses
Partager