Eviter la répetition des valeurs dans un ComboBox

michimichid Messages postés 36 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 10 février 2012 - 6 mars 2011 à 23:07
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 18 mars 2011 à 11:46
Bonjour,


J'affiche des champs dans un comboBox a l'aide de la commande :
comboBox1.dataSource = R.GetData().Distinct().Tolist();
comboBox1.DisplayMember = "Designation";
le problème c'est que même si je fais Distinct il m'affiche les champs double
resultat :

R
A
E
R
R
...
si vous pouvez m'aider
Merciii

2 réponses

poomen Messages postés 117 Date d'inscription dimanche 2 janvier 2011 Statut Membre Dernière intervention 25 mars 2011
17 mars 2011 à 15:17
l'ami..si tu trouve la réponse pour la combobox , poste la stp , je travaille en ado.net , c # j'ai une un combo qui affiche tout les enregistrement , et il y a ceux qui ceux en double.....merci de vouloir m'aider
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
18 mars 2011 à 11:46
Salut

Déjà, il faudrait que tu nous dises la classe de ta variable R.
Distinct() compare les objets de ta liste. Tant que tu ne redéfinis pas la comparaison entre tes objets, Distinct() va comparer les références et non les valeurs de tes objets.

La solution la plus simple est de redéfinir la méthode Equals() de la classe en question :

// A l'intérieur de ta classe
public override bool Equals(object obj)
{
    // Si la classe de l'objet avec lequel tu compares est incompatible, 
    // ça ne peut pas être égal
    if(!(obj is NomDeTaClasse)) return false;

    // Si la classe est compatible, on dit que deux objets sont égaux
    // si leurs désignations sont égales
    else return this.Designation == ((NomDeTaClasse)obj).Designation;
}


En ajoutant ça, normalement le distinct devrait considérer comme égaux 2 objets avec la même désignation, et donc devrait enlever les doublons.

Si tu n'as pas envie de redéfinir la méthode Equals de ton objet, tu peux regarder cette page :
http://msdn.microsoft.com/fr-fr/library/ms132151.aspx
Il faudra donc créer une classe qui implémente IEqualityComparer<NomDeTaClasse>, puis créer une instance de cette classe avant la comparaison, et fournir cet arguement à la méthode Distinct()

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous