2012-06-19 59 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