【问题标题】:Efficiently populating an ASP.Net Calendar control有效地填充 ASP.Net 日历控件
【发布时间】: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


    【解决方案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
    }
    

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

    【讨论】:

    • ...天才。我肯定是想多了,现在看起来很明显:)谢谢!
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多