2012-06-19 151 views
0

我有一个ASP.Net日历控件,在DayRender上,通过“CalendarEvents”(我的一个类)列表循环。如果DayRender所在的那天位于CalendarEvents列表中,请使用该事件的详细信息填充该日历单元格。高效填充ASP.Net日历控件

在我的测试环境中,没有问题,但我想象着数千条记录,这可能会成为一个问题。下面是我在做什么:

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上的“allevents”列表循环,是否有潜在的危险/资源密集?日历控件是否仅在正在显示的月份中调用DayRender?如果是这样,一次只能打30或31个电话,可能没问题。但是,如果它在整个一年,或者前一个月和下一个月都有类似的叫DayRender的话......无论如何,希望你明白我的观点。对此的建议将不胜感激。

3)有什么我可以做得更好?我意识到我只发布了裸露的骨架,但如果任何人有任何类似的经验,或他们希望他们早些时候意识到的陷阱,这一建议将不胜感激。


当我打字,我意识到问题,当我得到了CalendarEventList在页面级,我马上可以遍历并切出除了最后3以及未来3个月的东西应有尽有。问题在于,以某种方式跟踪它,以便当用户返回4个月时,我必须意识到这一点并再次调用数据库。我有一种模糊的感觉,即答案在某个方向,但仍不确定。

回答

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 
} 

这样,你将检索只需要的记录。

+0

...天才。我绝对过度思考,现在看起来如此明显:)谢谢! – CptSupermrkt