Icomparer

Résolu
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006 - 29 avril 2006 à 15:51
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 29 avril 2006 à 20:34
Bonjour,
j'utilise Icomparer pour trier les column de ma listeview par ordre croissant la premiere fois puis par ordre décroissant au second clique
jusqu'ici aucun probleme
mais je souhaite trier lorsqu'on clique sur la premiere column suivant deux criteres :
Le nom de la personne et le tag de l'image associé
il faut par exemple
personne a tag a
personne c tag a
paersonne e tag a
personne b tag b
personne f tag b
...
Pouvez vous me donner une piste...

  Dans ma classe ListViewItemSorter j'utilise
return String.Compare(itemx, itemy);
ou
return String.Compare(itemy, itemx);

Merci d'avance

14 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 avril 2006 à 20:34
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 16:45
Salut,

Il te suffit de ne comparer les noms de personne que si la comparaison des tags à renvoyer 0.

En partant du principe que le nom est en texte de l'item et que le tag est le premier sous item ça donne qqch de genre :

// comparaison des tags
ret = string.Compare(itemx.SubItems[1].Text, itemy.SubItems[1].Text);



// si les tags sont identiques, comparaison des noms
if (ret == 0)
   ret = string.Compare(itemx.Text, itemy.Text);



return ret;







/*
coq
MVP Visual C#
*/
0
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006
29 avril 2006 à 17:05
Super, je n'y avait pas pensé, mais il reste un dernier détail si je fais :
personne b tag b

personne c tag a
personne a tag a
paersonne e tag a
personne f tag b

Cela donnera
personne b tag b

personne f tag b
personne a tag a


personne c tag a

paersonne e tag a

Mais en fait la personne a doit se trouver en premier de ma liste, ce n'ets pas le cas encore, comment donc je vais pouvoir faire ?
Merci bcp :)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 17:15
Elle ne peut pas, son tag est a, pas b.
non ?

/*
coq
MVP Visual C#
*/
0

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

Posez votre question
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006
29 avril 2006 à 17:18
oui pardon je te donne un exemple plus vrai dem on pb :

personne b tag b
personne c tag a
personne a tag c
paersonne e tag a
personne f tag b

Cela donnera
personne c tag a

paersonne e tag a
personne b tag b
personne f tag b
personne a tag c
Ici la personne a doit etre en premier
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 17:27
J'avoue que j'ai du mal a saisir ton ordre de tri.
Qui est prioritaire, le tag ou le nom ?

Si c'est le tag, la liste doit bien devenir :
personne c tag a
personne e tag a
personne b tag b
personne f tag b
personne a tag c

Si c'est le nom (il faut donc inverser le code précédent), elle doit devenir :
personne a tag c
personne b tag b
personne c tag a
personne e tag a
personne f tag b

D'après ce que tu dis, tu veux :
personne a tag c
personne c tag a
personne e tag a
personne b tag b
personne f tag b

Et là, pas compris la logique.

/*
coq
MVP Visual C#
*/
0
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006
29 avril 2006 à 17:32
Je veux ke les personnes soit triés par ordre alphabétique commencé par la personne a puis lui mettre toute les personnes ayany le meme tag qu'elle
Ensuite la personne suivante toujours par ordre alphabétique

personne a tag c            //Le a  car premier
personne b tag b         //Le b car second

personne f tag b         //le f car tag meme que b
personne c tag a         //Le c car troisieme
personne e tag a         //Le e car meme tag ke le c

Je prend en compte en fait le nom pour choisir sur quel tag je dois commencer a trier
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 17:42
Alors là je ne crois pas que le Sorter qui te donne 2 items et son algo QuickSort soit la bonne solution.

Car là en gros ça correspond à :
1) trouver la première personne par ordre alphabétique
2) chercher la liste des personnes ayant le même tag dans la liste des personnes restantes
3) trier cette liste par ordre alphabétique
4) les insérer à la suite de la personne trouvée en 1

Et ainsi de suite jusqu'à épuisement de la pile.

/*
coq
MVP Visual C#
*/
0
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006
29 avril 2006 à 17:44
Je peux utiliser quelles solutions alors ? les autre info ke j'ai trouvé sur les tris me parraissent un peu compliquées ...
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 17:55
Ba coder ta propre méthode de tri au lieu de te servir de Sort.

/*
coq
MVP Visual C#
*/
0
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006
29 avril 2006 à 17:58
Et comment je fais pour échanger deux lignes dans une listview ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 18:07
Une "montée" n'est jamais rien d'autre qu'une suppression suivie d'une insertion, donc en te servant de Remove/RemoveAt sur l'item à "monter" puis de Insert avec l'index de l'item à "descendre".
Mais dans ton cas je me demande si effectuer le tri en dehors du contrôle puis recharger l'ensemble des items une fois triés ne serait pas plus judicieux.

/*
coq
MVP Visual C#
*/
0
nathdiscaz Messages postés 17 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 12 juin 2006
29 avril 2006 à 18:51
c'est pas évident, en dehors du controle c a dire ? je ne comprend pas trop ce ke tu veux me dire ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
29 avril 2006 à 19:22
En te servant de collections autres que Items.
Et une fois le tri effectué, tu réinsères tes items.

/*
coq
MVP Visual C#
*/
0
Rejoignez-nous