【发布时间】:2012-06-19 05:34:51
【问题描述】:
我有一个 ASP.Net 日历控件,它在 DayRender 上循环遍历“CalendarEvents”列表(我的一个类)。如果 DayRender 所在的那一天在 CalendarEvents 列表中,则在该日历单元格中填写事件的详细信息。
在我的测试环境中,没有问题,但我想有成千上万的记录,它可能会成为一个问题。这是我正在做的事情:
public partial class calendar : System.Web.UI.Page
{
CalendarEventList allevents = CalendarEventManager.GetListAll();
//Page_Load, etc...
protected void calmaincalendar_DayRender(object sender, DayRenderEventArgs e)
{
foreach (CalendarEvent x in allevents)
{
if (e.Day.Date == x.EventDate)
{
//logic to extract the data from x, and modify the e.Cell to display that data
}
}
}
}
我的问题是:
1) 我将事件作为页面级别的变量,这样数据库只需要调用一次,而不是在每个 DayRender 上。好坏?潜在问题?此页面仅用于阅读日历事件,不能编辑或删除。
2) 循环遍历每个 DayRender 上的“所有事件”列表,这是否具有潜在危险/资源密集型? Calendar 控件是否仅针对正在显示的月份调用 DayRender?如果是这样,意味着一次只有 30 或 31 个电话,那可能没问题。但是,如果它在全年或上个月和下个月都调用 DayRender 之类的事情......无论如何,希望你明白我的意思。我们将不胜感激。
3) 有什么我可以做得更好的吗?我意识到我只发布了简单的骨架,但如果有人有任何类似的经历,或者他们希望早日意识到的陷阱,我们将不胜感激。
当我输入问题时,我意识到当我在页面级别获得 CalendarEventList 时,我可以立即循环遍历它并删除除过去 3 个月和未来 3 个月或其他内容之外的所有内容。问题是,以某种方式跟踪它,以便当用户返回 4 个月时,我必须意识到这一点并再次调用数据库。我有一种模糊的感觉,答案在那个方向的某个地方,但仍然不确定。
【问题讨论】:
标签: c# asp.net foreach calendar web-controls