2012-06-19 2 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) Я помещаю события как переменная уровня страницы, так что база данных должна только быть вызван один раз, а не на каждый день. Хорошо плохо? Потенциальные проблемы? Эта страница предназначена исключительно для чтения событий календаря, а не для редактирования или удаления.

2) Пройдя через список «облегчений» на каждый день, это потенциально опасно/ресурс? Контролирует ли календаря DayRender только месяц, который отображается? Если это так, что означает только 30 или 31 звонка за раз, это может быть хорошо. Но если он делает что-то вроде звонков DayRender в течение всего года или в предыдущий и следующий месяцы ... В любом случае, надеюсь, вы получите мое мнение. Совет по этому вопросу будет оценен по достоинству.

3) Есть ли что-нибудь, что я мог бы сделать лучше? Я понимаю, что я только опубликовал голый скелет, но если у кого-то есть какой-то подобный опыт или ловушки, которые они хотели бы знать ранее, этот совет будет оценен.


Как я печатал на вопросы, которые я понял, что, когда я получаю CalendarEventList на уровне страницы, я мог сразу же петлю через него и вырезать все за последние 3 и последующих 3 месяцев или что-то кроме. Проблема в том, что она каким-то образом отслеживает ее, так что, когда пользователь вернется на 4 месяца, мне придется это осознать и снова вызвать базу данных. У меня есть смутное чувство, что ответ находится где-то в этом направлении, но все еще не уверен.

ответ

1

Как вы говорите о records У меня есть базовая база данных. Если да, то я предлагаю создать запрос для этого, так что вы можете сделать это:

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

... Genius. Я определенно передумал, это кажется таким очевидным сейчас :) Спасибо! – CptSupermrkt

Смежные вопросы