シンプルなカレンダー ページがあり、利用可能な日付のリストを入力する必要があります。
次のようにリストを取得します。
List<DateTime> availableDates = (from d in sb.GetDaysWithAvailableSlotsByLocation(3)
select d.Date).ToList<DateTime>();
ただし、この関数が Page_load で呼び出される前にカレンダーがレンダリングされるように見えます。これを機能させるには、このクエリをコードに 2 回入れる必要があるためです。
public partial class BookYourSlot : System.Web.UI.Page
{
public SlotBooker sb = new SlotBooker();
public List<DateTime> availableDates = new List<DateTime>();
protected void Page_Load(object sender, EventArgs e)
{
List<DateTime> availableDates = (from d in sb.GetDaysWithAvailableSlotsByLocation(3)
select d.Date).ToList<DateTime>();
DateTime firstAvailable = availableDates.Min();
calSlotBooker.VisibleDate = firstAvailable;
}
protected void calSlotBooker_DayRender(object sender, DayRenderEventArgs e)
{
List<DateTime> availableDates = (from d in sb.GetDaysWithAvailableSlotsByLocation(3)
select d.Date).ToList<DateTime>();
if (!(availableDates.Contains(e.Day.Date)) || (e.Day.Date.DayOfWeek == DayOfWeek.Saturday) || (e.Day.Date.DayOfWeek == DayOfWeek.Sunday))
{
e.Cell.BackColor = System.Drawing.Color.Silver;
e.Day.IsSelectable = false;
e.Cell.ToolTip = "Unavailable";
}
}
}
これは、セルがレンダリングされるたびに availableDates クエリを呼び出すため、非常に非効率的です。
ページで一度これを行い、カレンダー コントロールの DayRender イベントにアクセスできるようにするにはどうすればよいですか?