2010-03-30 11 views
5

Tengo un problema que parece que no puedo encontrar a través de las búsquedas (o bien estoy buscando algo completamente incorrecto). Tengo una lista de elementos llamados "Top 10" en un elemento de lista ordenada que se rellena desde mi base de datos (SortedList donde int es posición y cadena es elemento). Quiero poder mover elementos hasta & en el orden de la lista con el clic de un botón y luego guardar la nueva orden de nuevo en la base de datos. Estoy de acuerdo con la parte de DB. Es solo el reordenamiento con el que realmente estoy luchando. ¿Es una lista ordenada la colección correcta para esto?Reordenación de la recopilación C#

Muchas gracias por cualquier consejo ofrecido.

+0

@ Adam: ¿Cómo es la vista de la lista implementado? ¿Qué tipo de vista estás usando? –

+0

Hola Asaf: actualmente estoy recibiendo mi colección y enlace de datos a un repetidor (aunque no soy valioso sobre el método de visualización). – Adam

Respuesta

6

Una SortedList es para mantener el orden dentro de su SortedList a medida que agrega o quita elementos de ella.

Debe crear una lista personalizada de sus objetos y luego ordenar en la propiedad de ese objeto.

Así que si su entrada en la base de datos fue como esto es colocarlo en un objeto, añadir a una lista y luego resolverlo utilizando Lambda en la que siempre los criterios Quieres

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

También puede entonces use RemoveAt() e Insertar() para mover los artículos a posiciones personalizadas dentro de la lista.

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

Muchas gracias por la respuesta (¡las respuestas relacionadas con el fútbol son siempre más fáciles de entender!) Creo que lo entiendo, así que en tu ejemplo si los Lobos se mueven hacia abajo en una posición ¿Los Spurs son automáticamente movidos hacia arriba? ¿Todos los demás miembros de la lista mantienen la posición y de qué manera está reemplazando movido el elemento que , siempre está activo? – Adam

+0

Sí, mantienen su posición en la matriz de acuerdo con sus últimos criterios de clasificación.Luego estás reposicionando dentro de ese género hasta que decidas volver a clasificarlo de nuevo. –

3

No, una lista ordenada será mantenga cosas en orden ordenado (alfa/numérico). Desea una lista simple que le permita sacar cosas e insertarlas en diferentes posiciones.

0

Una SortedList va a obligar a cada elemento a realizar un seguimiento de su posición dentro de la lista relativa a los otros elementos (su posición int). Esta debe ser una responsabilidad de la Colección, por lo que debe usar algún tipo de Colección que le permita mover cosas arriba/abajo/alrededor sin tener que corregir manualmente cada elemento.

+1

Gracias - ¿puedes sugerir una Colección adecuada? – Adam

0

Yo diría que SortedList es exactamente lo que usted quiere. Cuando recuperas datos de la base de datos, quieres mantenerlos en orden según el campo de posición (lo que puedo decir de tu OP). Supongo que tendrás una clase que contenga los datos que estás obteniendo de la base de datos. Para mantener los datos en el orden correcto, deberá implementar la interfaz IComparable en su clase personalizada para que SortedList sepa qué valores usar para mantener la lista en orden. De esta manera, a medida que agrega/elimina elementos, los mantendrá en el orden correcto.

Puede usar una lista genérica <> pero luego tiene que escribir todo el código para ordenar sus artículos usted mismo, SortedList ya lo hace, entonces ¿por qué reinventar la rueda?

Echa un vistazo a esta página para obtener más información:

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

Cuestiones relacionadas