0

我有一个 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 个月时,我必须意识到这一点并再次调用数据库。我有一种模糊的感觉,答案在那个方向的某个地方,但仍然不确定。

4

1 回答 1

1

当您谈论记录时,我猜您有一个基础数据库。如果是这样,我会建议为此创建一个查询,所以你可以这样做:

foreach (CalendarEvent x in CalendarEventManager.GetForDate(e.Day.Date))
{
    //logic to extract the data from x, and modify the e.Cell to display that data
}

这样,您将只检索所需的记录。

于 2012-06-19T05:43:32.310 回答