在 C# 中或使用 jQuery 按日期属性拆分列表
本文关键字:日期 属性 拆分 列表 jQuery | 更新日期: 2023-09-27 17:56:03
我有一个List<Event>
,一个Event
有一个Date
属性。 我目前正在将此列表绑定到一个asp:repeater
这很好,并导致如下事件标题列表:
事件 1
事件 2
事件 3
事件 4
事件 5
但是,现在我希望在不同日期发生的事件之间向列表中添加某种分隔符,以便我的列表如下所示:
2011 年 5 月 10 日,星期二
事件 1
事件 2
2011 年 5 月 11 日,星期三
事件 3
2011 年 5 月 12 日,星期四
事件 4
事件 5
任何人都可以推荐一个好方法。 我很乐意在服务器端操作我的列表或绑定我的列表,然后使用 jQuery 在客户端添加分隔符。 有什么建议吗?
您可以使用 Linq 的 GroupBy 按日期服务器端分组
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
返回IEnumerable<IGrouping<TKey, TSource>>
,因此在本例中,您返回的是IEnumerable<IGrouping<DateTime, Event>>
或者您可以使用嵌套中继器 - 在这种情况下,您将需要其中两个 - 。
父转发器呈现日期,并为父项的日期嵌套一个项目。
这一切都是关于以当前方式以外的另一种方式设置 Repeaters 的数据源,并使用 Repeater.ItemDataBound 事件。
您可以按天对事件进行分组,并将该键用作转发器的标头。
另一种方式:
列表日期 =(从事件列表中的事件 n 开始 选择"新建 {n.Date}")。ToList()。区别();foreach (日期时间日期 日期中的日期){添加到日期,然后添加事件与日期匹配。}