2010-03-30 2 views
5

Ich habe ein Problem, auf das ich keine Antwort durch Suchen finden kann (entweder das oder ich suche nach der völlig falschen Sache!). Ich habe eine Liste von Elementen mit dem Namen "Top 10" in einem sortierten Listenelement, das aus meiner DB gefüllt ist (SortedList, wobei int Position und String Element ist). Ich möchte Objekte & in der Liste Reihenfolge auf einen Klick verschieben und speichern Sie dann die neue Bestellung zurück in die DB. Ich bin OK mit dem DB-Teil, es ist nur die Nachbestellung, mit der ich wirklich kämpfe - ist eine sortierte Liste die richtige Sammlung dafür?Nachbestellen der Sammlung C#

Vielen Dank für jede Beratung angeboten.

+0

@ Adam: Wie ist die Ansicht der Liste umgesetzt? Welche Art von Sicht verwenden Sie? –

+0

Hallo Asaf - Ich bekomme gerade meine Sammlung und Datenbindung zu einem Repeater (obwohl ich nicht über die Anzeige-Methode Wert bin). – Adam

Antwort

6

Eine SortedList dient zur Aufrechterhaltung der Reihenfolge in Ihrer SortedList, während Sie Elemente hinzufügen oder daraus entfernen.

Sie sollten eine benutzerdefinierte Liste Ihrer Objekte erstellen und dann nach der Eigenschaft dieses Objekts sortieren.

Also, wenn Ihr Eintrag in Ihrer Datenbank wie dies Sie es in einem Objekt platzieren könnte, fügen Sie ihn in eine Liste und dann Lambda sortieren verwenden, auf dem jemals Kriterien Sie

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)); 

mögen, können Sie auch dann Verwenden Sie RemoveAt() und Insert(), um Elemente an benutzerdefinierte Positionen in der Liste zu verschieben.

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

Vielen Dank für die Antwort (Fußball bezogene Antworten sind einfacher zu verstehen!) Ich denke, ich bekomme es, also in Ihrem Beispiel, wenn Wölfe eine Position nach unten bewegt Sporen sind automatisch eine Position nach oben bewegt? Behalten alle anderen Listenmitglieder die Position bei und in welche Richtung wird der Artikel verschoben, ist es immer oben? – Adam

+0

Ja, sie behalten ihre Position im Array gemäß Ihren letzten Sortierkriterien bei.Dann werden Sie innerhalb dieser Art neu positioniert, bis Sie sich entscheiden, erneut zu sortieren. –

3

Nein, eine SortedList wird halten Dinge in sortierter (alphanumerischer) Reihenfolge. Sie möchten eine einfache Liste, mit der Sie Dinge herausziehen und an verschiedenen Positionen einfügen können.

0

Eine SortedList wird jedes Element zwingen, seine Position innerhalb der Liste relativ zu den anderen Elementen (Ihrer int-Position) zu verfolgen. Dies sollte eine Verantwortung der Sammlung sein, also sollten Sie eine Art von Sammlung verwenden, die es Ihnen erlaubt, Dinge nach oben/unten/herum zu bewegen, ohne jedes Element manuell korrigieren zu müssen.

+1

Danke - können Sie eine passende Colection vorschlagen? – Adam

0

Ich würde sagen, eine SortedList ist genau das, was Sie wollen. Wenn Sie Daten aus der Datenbank zurückbekommen, möchten Sie sie basierend auf dem Positionsfeld in Ordnung halten (was ich aus Ihrem OP ersehen kann). Ich gehe davon aus, dass Sie eine Klasse haben werden, die die Daten enthält, die Sie aus der DB erhalten. Um die Daten in der richtigen Reihenfolge zu halten, müssen Sie die IComparable-Schnittstelle in Ihrer benutzerdefinierten Klasse implementieren, damit SortedList weiß, welche Werte verwendet werden müssen, um die Liste in der richtigen Reihenfolge zu halten. Auf diese Weise werden Sie beim Hinzufügen/Entfernen von Elementen in der richtigen Reihenfolge bleiben.

Sie könnten eine generische Liste verwenden <> aber dann müssen Sie den ganzen Code schreiben, um Ihre Artikel selbst zu sortieren, die SortedList tut dies bereits, also warum erfinden Sie das Rad neu?

Schauen Sie für weitere Informationen auf dieser Seite:

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