Triage de ListView

Résolu
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 - 22 sept. 2005 à 12:19
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 22 sept. 2005 à 23:19
Bonjour,



J'ai fait le tour du forum et je n'ai pas réussi à appliquer les

réponses trouvées.



Voila mon code :



for(i = 0; i < max; i++)

{

dt = (DateTime) date;

lwi = new ListViewItem(

new string [] {




dt.ToString("MM/yyyy"),




(string) str



},

0

);

this.listView.Items.Add(lwi);

}

listView.Sort();





Mon listView contient donc une date et un nom, mais quand j'utilise la methode sort

sur le listView il ne tri rien du tout.

Si quelqun pouvait m'expliquer pourquoi je serai ravi.



Merci d'avance.

11 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 sept. 2005 à 12:38
Tu peux implementer un IComparer pour que le Sort() marche. Je copie-colle la msdn :



<hr size="2" width="100%">

class ListViewItemComparer : IComparer

{

private int col;

public ListViewItemComparer()

{

col = 0;

}

public ListViewItemComparer(int column)

{

col = column;

}

public int Compare(object x, object y)

{

return
String.Compare(((ListViewItem)x).SubItems[col].Text,
((ListViewItem)y).SubItems[col].Text);

}

}

<hr size="2" width="100%">

Tu n'as plus qu'a ajouter cette ligne :

this.listView.ListViewItemSorter = new ListViewItemComparer();


Ou sinon, tu peux aussi mettre la propriété Sorting de ton ListView à SortOrder.Ascending.


Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 sept. 2005 à 13:37
Alors change la fonction Compare() que je t'ai donné plus haut par celle ci :



<hr size="2" width="100%">

public int Compare(object x, object y)

{

DateTime dt1 = DateTime.Parse(((ListViewItem)x).SubItems[col].Text);

DateTime dt2 = DateTime.Parse(((ListViewItem)y).SubItems[col].Text);

return DateTime.Compare(dt1, dt2);

}


<hr size="2" width="100%">
Mx
3
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 2
22 sept. 2005 à 12:51
J ai essayé, il me met ca comme erreur :



Using the generic type "System.collections.Generic.IComparer<T>" requires '1' type arguments et je vois pas d ou ca vient
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 sept. 2005 à 12:52
Enleve la declaration du namespace System.Collections.Generic et remplace par System.Collections

Mx
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 2
22 sept. 2005 à 12:57
Maintenant il me dit que ListViewItem could not be found,



je coirs que je vais utiliser des list ca me prendra moins de temps.



Merci quand même.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
22 sept. 2005 à 13:00
ListViewItem ? C'est System.Windows.Forms ca.

Si tu utilises Visual Studio 2005 tu peux faire Click droit sur le mot
ListViewItem->Resolve->... pour qu'il retrouve lui meme le
namespace a utiliser

Mx
0
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 2
22 sept. 2005 à 13:26
En fait je veux classer par date (DataTime), et je classe directement ma

table (dans ma base de donnée) mais je me suis rendu compte que quand

je fais :



DataTable tmp = drOperations[0].Table;



string sortExp = "DATE";

DataRow[] drarray;


drarray = tmp.Select(null, sortExp, DataViewRowState.CurrentRows);



drarray contient bien les lignes de ma table triess par date mais elles sont triees par

rapport au mois (MM/YYYY) et pas par rapport a l annee puis au mois

ce qui fait que dans mon tableau j'ai:



01/2002

02/2005

03/2001

05/2004



alors que je voudrai



03/2001

01/2002

05/2004

02/2005



mais je ne sais pas comment lui indiquer



Ecore merci pour votre aide.
0
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 2
22 sept. 2005 à 14:42
Je crois que je suis dans l'obligation de te dire que tu dechires mec

Tout marche parfaitement maintenant.



UN GRAND MERCI !!!
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
22 sept. 2005 à 14:51
attention tout de même... dans le cas où la cellule de ta listview est vide le DateTime.Parse ne va pas aimer

Sébastien FERRAND
0
cs_poullos Messages postés 145 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 27 décembre 2005 2
22 sept. 2005 à 15:29
Merci du conseil.



Par contre, est ce que tout ce que je viens de demander est possible aussi avec

une comboBox et si oui est ce que c'est facilement adaptable parceque j'ai pas l'impression?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
22 sept. 2005 à 23:19
Salut,

Pour le ComboBox tu peux très bien effectuer ton tri dans une liste à part puis ajouter tes items dans l'ordre ensuite.
ArrayList (par exemple) possède d'ailleurs une méthode Sort dont 2 des surcharges acceptent un IComparer en paramètre.
ArrayList.Sort Method (IComparer)
ArrayList.Sort Method (Int32, Int32, IComparer)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous