Dividir la lista por propiedad de fecha en C # o usar jQuery

Tengo un List<Event> y un Event tiene un Date propiedad. Actualmente estoy vinculando esta lista a un asp:repeater lo cual está bien y da como resultado una lista de títulos de eventos como esta:

Evento 1
Evento 2
Evento 3
Evento 4
Evento 5

Sin embargo, ahora deseo agregar algún tipo de separador a mi lista entre los eventos que ocurren en diferentes días para que mi lista se vea así:

Martes, mayo 10, 2011
Evento 1
Evento 2
Miércoles, Mayo 11, 2011
Evento 3
Jueves, mayo 12, 2011
Evento 4
Evento 5

¿Alguien puede recomendar una buena manera de hacer esto? Me complace manipular mi lista del lado del servidor o vincular mi lista y luego agregar los separadores del lado del cliente con jQuery. ¿Alguna sugerencia?

preguntado el 10 de mayo de 11 a las 13:05

Puedes haber anidado asp:repeater con una consulta agrupada por Fecha del evento y el repetidor externo solo muestra la Fecha y el repetidor interno muestra los eventos para ese grupo. -

4 Respuestas

Puede agrupar por fecha del lado del servidor utilizando Linq's Agrupar por

class Event
{
    public DateTime EventDate;
    public string EventName;
}

List<Event> events = GetEvents();

var grouped = events.GroupBy(e => e.EventDate.Date).OrderBy(g => g.Key);

foreach (var grouping in grouped)
{
    Console.WriteLine(grouping.Key); // <-- this is the date

    foreach (Event e in grouping) // <-- this is the list of events
    {
        Console.WriteLine(e.EventName); 
    }
}

GroupBy devoluciones IEnumerable<IGrouping<TKey, TSource>>, entonces en este caso estas regresando IEnumerable<IGrouping<DateTime, Event>>

contestado el 10 de mayo de 11 a las 17:05

+1 - Usé esto y los repetidores anidados en la respuesta de Matias Fidemraizer para lograr lo que quería. - Andy

O puede usar repetidores anidados, en este caso necesitará dos de ellos.

El repetidor principal representa las fechas y anida un elemento para la fecha del elemento principal.

Se trata de configurar la fuente de datos de los repetidores de una manera diferente a la actual y jugar con el evento Repeater.ItemDataBound.

contestado el 10 de mayo de 11 a las 17:05

+1 - Usé esto y la agrupación en la respuesta de fearofawhackplanet para lograr lo que quería. - Andy

Puede agrupar los eventos por día y usar esa tecla como encabezado del repetidor.

contestado el 10 de mayo de 11 a las 17:05

De otra manera:

Fecha de lista = (Desde el Evento n en su Lista de eventos seleccione nuevo {n. Fecha}). ToList (). Distinct (); foreach (DateTime dateA in date) {// agregue a la fecha y luego agregue los eventos que coincidan con la fecha. }

contestado el 10 de mayo de 11 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.