2010-03-30 23 views
5

J'ai un problème que je ne peux pas trouver de réponse à des recherches (soit cela ou je cherche la chose complètement fausse!). J'ai une liste d'éléments appelés "Top 10" dans un élément trié qui est rempli à partir de ma base de données (SortedList où int est la position et la chaîne est l'élément). Je veux être en mesure de déplacer les articles vers le haut & dans l'ordre de la liste à un clic sur un bouton, puis enregistrer la nouvelle commande à la base de données. Je suis d'accord avec la partie DB c'est juste la re-commande avec laquelle je me bats vraiment - est-ce qu'une liste triée est la collection correcte pour cela?Re-commande collection C#

Un grand merci pour tout conseil offert.

+0

@Adam: Comment est la vue de la liste mise en œuvre? Quel genre de vue utilisez-vous? –

+0

Salut Asaf - Je reçois actuellement ma collection et ma connexion de données à un répéteur (bien que je ne sois pas précieux sur la méthode d'affichage). – Adam

Répondre

6

Une liste triée est pour maintenir l'ordre dans votre liste triée que vous ajoutez ou enlevez des articles de elle.

Vous devez créer une liste personnalisée de vos objets, puis trier les propriétés de cet objet.

Donc, si votre entrée dans votre base de données était comme cela, vous pouvez le placer dans un objet, l'ajouter à une liste et trier puis à l'aide de Lambda sur lequel jamais critères vous

public class LeaguePosition 
{ 
    public int Position { get; set; } 
    public string Team { get; set; } 
} 


List<LeaguePosition> League = new List<LeaguePosition>(); 
League.Add(new LeaguePosition() { Position = 2, Team = "Wolves" }); 
League.Add(new LeaguePosition() { Position = 3, Team = "Spurs" }); 
League.Add(new LeaguePosition() { Position = 1, Team = "Villa" }); 

League.Sort((teamA, teamB) => teamA.Position.CompareTo(teamB.Position)); 

Vous pouvez alors également Utilisez RemoveAt() et Insert() pour déplacer des éléments à des positions personnalisées dans la liste.

LeaguePosition teamToMove = League[1]; 
League.RemoveAt(1); 
League.Insert(2, teamToMove); 
+0

Un grand merci pour la réponse (réponses liées au football sont plus faciles à comprendre!) Je pense que je comprends, donc dans votre exemple si les loups sont déplacés vers le bas d'une position Spurs sont automatiquement déplacé d'une position? Est-ce que tous les autres membres de la liste conservent leur position et de quelle façon est-ce que l'article que vous remplacez est , est-il toujours en place? – Adam

+0

Oui, ils conservent leur position dans le tableau en fonction de vos derniers critères de tri.Ensuite, vous vous repositionnez dans ce type jusqu'à ce que vous décidiez de ré-trier à nouveau. –

3

Non, une liste triée gardera en ordre trié (alphanumérique). Vous voulez une liste simple qui vous permettra de tirer les choses et les insérer à différents endroits.

0

Une liste triée va forcer chaque élément à garder une trace de sa position dans la liste par rapport aux autres éléments (votre position int). Cela devrait être une responsabilité de la Collection, donc vous devriez utiliser une sorte de Collection qui vous permettra de déplacer les choses vers le haut/bas/autour sans avoir à corriger manuellement chaque élément.

+1

Merci - pouvez-vous suggérer une Colection appropriée? – Adam

0

Je dirais qu'une liste triée est exactement ce que vous voulez. Lorsque vous récupérez des données de la base de données, vous souhaitez les conserver dans l'ordre en fonction du champ de position (ce que je peux dire à partir de votre OP). Je suppose que vous aurez une classe qui contient les données que vous récupérez de la base de données. Pour conserver les données dans le bon ordre, vous devez implémenter l'interface IComparable dans votre classe personnalisée afin que SortedList sache quelles valeurs utiliser pour conserver la liste dans l'ordre. De cette façon, lorsque vous ajoutez/supprimez des éléments, vous les gardez dans le bon ordre.

Vous pouvez utiliser une liste générique <> mais alors vous devez écrire tout le code pour trier vos articles vous-même, la SortedList le fait déjà, alors pourquoi réinventer la roue?

Jetez un oeil à cette page pour plus d'informations:

http://www.dotnetspider.com/resources/4679-Applying-custom-sort-SortedList.aspx