J'ai une collection d'objet, chaque objet représentant un site.
Un site, c'est :
un ID, le Nom, et 2 champs booleens.
Je charge ma collection à partir d'une requete SQL triée sur le nom.
Ma collection est liée à un datasource d'un datagrid.
Jusque là, tout va bien.
Lorsque j'ajoute un site via une interface se saisie, je souhaite retrouver
ma collection triée sur le nom du site.
J'ai donc fait tout ce qu'il me semble nécessaire de faire dans ma
collection pour trier mais objets
public class CollectionSites : CollectionBase
{
public void SortByName()
{
InnerList.Sort(new NameComparer());
}
private class NameComparer : IComparer
{
public int Compare(object x,object y)
{
Sites sX = x as Sites;
Sites sY = y as Sites;
int retour = sX.SiteName.CompareTo(sY.SiteName);
return 0;
}
}
}
mais pas de bol, mais objets se retrouve triés par ordre de bordel presque
aléatoire.
En mettant un messagebox dans le Compare pour me retourner le nom de chaque
site en comparaison, la valeur retournée par CompareTo (-1,0 ou 1) correspond
bien à ce qui est attendu.
Par exemple, si je saisi ceci :
MB15,X,BC,AKZ,N,ZY,XZ
j'obtient toujours cela
N,BC,XZ,MB15,X,AKZ,ZY
au lieu de cela
AKZ,BC,MB15,N,X,XZ,ZY
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zim
Et si au lieu du return 0, vous mettiez return retour ?
Cordialement, Zim.
Denis a écrit :
Bonjour à tous, voici ma question du jour.
J'ai une collection d'objet, chaque objet représentant un site. Un site, c'est : un ID, le Nom, et 2 champs booleens.
Je charge ma collection à partir d'une requete SQL triée sur le nom.
Ma collection est liée à un datasource d'un datagrid.
Jusque là, tout va bien.
Lorsque j'ajoute un site via une interface se saisie, je souhaite retrouver ma collection triée sur le nom du site.
J'ai donc fait tout ce qu'il me semble nécessaire de faire dans ma collection pour trier mais objets
public class CollectionSites : CollectionBase { public void SortByName() { InnerList.Sort(new NameComparer()); }
private class NameComparer : IComparer { public int Compare(object x,object y) {
Sites sX = x as Sites; Sites sY = y as Sites; int retour = sX.SiteName.CompareTo(sY.SiteName); return 0; } } }
mais pas de bol, mais objets se retrouve triés par ordre de bordel presque aléatoire.
En mettant un messagebox dans le Compare pour me retourner le nom de chaque site en comparaison, la valeur retournée par CompareTo (-1,0 ou 1) correspond bien à ce qui est attendu.
Par exemple, si je saisi ceci : MB15,X,BC,AKZ,N,ZY,XZ j'obtient toujours cela N,BC,XZ,MB15,X,AKZ,ZY au lieu de cela AKZ,BC,MB15,N,X,XZ,ZY
C'est quoi ce tri ?
Aloha, 2nis
Et si au lieu du return 0, vous mettiez return retour ?
Cordialement,
Zim.
Denis a écrit :
Bonjour à tous, voici ma question du jour.
J'ai une collection d'objet, chaque objet représentant un site.
Un site, c'est :
un ID, le Nom, et 2 champs booleens.
Je charge ma collection à partir d'une requete SQL triée sur le nom.
Ma collection est liée à un datasource d'un datagrid.
Jusque là, tout va bien.
Lorsque j'ajoute un site via une interface se saisie, je souhaite retrouver
ma collection triée sur le nom du site.
J'ai donc fait tout ce qu'il me semble nécessaire de faire dans ma
collection pour trier mais objets
public class CollectionSites : CollectionBase
{
public void SortByName()
{
InnerList.Sort(new NameComparer());
}
private class NameComparer : IComparer
{
public int Compare(object x,object y)
{
Sites sX = x as Sites;
Sites sY = y as Sites;
int retour = sX.SiteName.CompareTo(sY.SiteName);
return 0;
}
}
}
mais pas de bol, mais objets se retrouve triés par ordre de bordel presque
aléatoire.
En mettant un messagebox dans le Compare pour me retourner le nom de chaque
site en comparaison, la valeur retournée par CompareTo (-1,0 ou 1) correspond
bien à ce qui est attendu.
Par exemple, si je saisi ceci :
MB15,X,BC,AKZ,N,ZY,XZ
j'obtient toujours cela
N,BC,XZ,MB15,X,AKZ,ZY
au lieu de cela
AKZ,BC,MB15,N,X,XZ,ZY
Et si au lieu du return 0, vous mettiez return retour ?
Cordialement, Zim.
Denis a écrit :
Bonjour à tous, voici ma question du jour.
J'ai une collection d'objet, chaque objet représentant un site. Un site, c'est : un ID, le Nom, et 2 champs booleens.
Je charge ma collection à partir d'une requete SQL triée sur le nom.
Ma collection est liée à un datasource d'un datagrid.
Jusque là, tout va bien.
Lorsque j'ajoute un site via une interface se saisie, je souhaite retrouver ma collection triée sur le nom du site.
J'ai donc fait tout ce qu'il me semble nécessaire de faire dans ma collection pour trier mais objets
public class CollectionSites : CollectionBase { public void SortByName() { InnerList.Sort(new NameComparer()); }
private class NameComparer : IComparer { public int Compare(object x,object y) {
Sites sX = x as Sites; Sites sY = y as Sites; int retour = sX.SiteName.CompareTo(sY.SiteName); return 0; } } }
mais pas de bol, mais objets se retrouve triés par ordre de bordel presque aléatoire.
En mettant un messagebox dans le Compare pour me retourner le nom de chaque site en comparaison, la valeur retournée par CompareTo (-1,0 ou 1) correspond bien à ce qui est attendu.
Par exemple, si je saisi ceci : MB15,X,BC,AKZ,N,ZY,XZ j'obtient toujours cela N,BC,XZ,MB15,X,AKZ,ZY au lieu de cela AKZ,BC,MB15,N,X,XZ,ZY
C'est quoi ce tri ?
Aloha, 2nis
Faust
voire directement
return sX.SiteName.CompareTo(sY.SiteName);
/_Zim_ a prétendu/ :
Et si au lieu du return 0, vous mettiez return retour ?
"Avale tout sans réfléchir, ce qui n'est pas commestible resortira toujours" - Proverbe Troll
Simon Mourier [MS]
J'en profite pour faire une remarque. Si l'objet Sites est toujours (ou souvent) classé par nom, il vaut mieux le faire dériver de IComparable, comme ça c'est lié directement à la classe (ce qui n'empêche pas de créer des comparers spécifiques pour des besoins spécifiques)
public int CompareTo(object obj) { Sites sites = obj as Sites; if (sites == null) throw new ArgumentException(); return this.SiteName.CompareTo(sites.SiteName); }
Simon.
"Denis" a écrit dans le message de news:
Merci à vous deux, ca fonctionne mieux ainsi ! L'erreur était tellement grosse, shame on me !!
Par contre, puisque je forcais le retour à 0 (donc objets identiques) pourquoi ne restaient-ils pas classé dans le même ordre ? mystère.
"Avale tout sans réfléchir, ce qui n'est pas commestible resortira toujours" - Proverbe Troll
J'en profite pour faire une remarque. Si l'objet Sites est toujours (ou
souvent) classé par nom, il vaut mieux le faire dériver de IComparable,
comme ça c'est lié directement à la classe (ce qui n'empêche pas de créer
des comparers spécifiques pour des besoins spécifiques)
public int CompareTo(object obj)
{
Sites sites = obj as Sites;
if (sites == null)
throw new ArgumentException();
return this.SiteName.CompareTo(sites.SiteName);
}
Simon.
"Denis" <Denis@discussions.microsoft.com> a écrit dans le message de news:
7576091E-8CAD-4B7C-8D77-B1CC9A43914E@microsoft.com...
Merci à vous deux, ca fonctionne mieux ainsi !
L'erreur était tellement grosse, shame on me !!
Par contre, puisque je forcais le retour à 0 (donc objets identiques)
pourquoi ne restaient-ils pas classé dans le même ordre ? mystère.
J'en profite pour faire une remarque. Si l'objet Sites est toujours (ou souvent) classé par nom, il vaut mieux le faire dériver de IComparable, comme ça c'est lié directement à la classe (ce qui n'empêche pas de créer des comparers spécifiques pour des besoins spécifiques)
public int CompareTo(object obj) { Sites sites = obj as Sites; if (sites == null) throw new ArgumentException(); return this.SiteName.CompareTo(sites.SiteName); }
Simon.
"Denis" a écrit dans le message de news:
Merci à vous deux, ca fonctionne mieux ainsi ! L'erreur était tellement grosse, shame on me !!
Par contre, puisque je forcais le retour à 0 (donc objets identiques) pourquoi ne restaient-ils pas classé dans le même ordre ? mystère.