Calendar kontrolünün DayRender diye bir olayı var. Bu olay takvimin her bir hücresi boyanmadan önce çağırılıyor. Burada her gün için bir renk belirleyebilirsin.
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
}
Buradaki e parametresinin Cell ve Day özellikleri var. Cell gün hücresini veriyor. Buna BackColor ile zemin rengi atanabilir. Day ise ilgili hücrenin Date ve IsSelectable gibi görsel olmayan bilgilerini veriyor.
Alttaki gibi bir sorgu içeren bir stok prosedür tanımla.
SELECT RandevuTarihi FROM RandevuTarihleriTablosu WHERE UyeId = @UyeId
Öğretmen seçilip, sayfa post back olduğunda Page_Init olayında, bu sorguyla çektiğin kayıtları bir tarih listesine yükle. Örneğin:
List<DateTime> tarihler;
void Page_Init(Object o, EventArgs e)
{
if (Page.IsPostBack)
{
SqlDaraReader rdr = SqlHelper.ExecuteReader(.....);
tarihler = new List<DateTime>();
while (rdr.Read()) {
tarihler.add(Convert.ToDateTime(rdr["RandevuTarihi"]));
}
}
}
Son olarak DayRender olayını aşağıdaki gibi bir şey yap.
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
if (tarihler.IndexOf(e.Date) > -1)
{
e.Cell.BackColor = System.Drawing.Color.Red;
e.Day.IsSelectable = false;
}
}
Kodların hiç biri test edilmedi. Artık ufak tefek hatalar olursa düzeltirsin.