Управление календарем - выделение дат программно
Я играю с управлением календарем, и я не могу выполнить простую задачу затенения дат. Если пользователь вводит 7 дат, я хочу заштриховать эти даты в календаре, чтобы пользователь знал, что они были выбраны.
По сути, я хочу сделать Calendar.HighlightDate("5/1/11") => воображаемое смешение. Я знаю, что это должно быть просто, но я разбираюсь в свойствах MSDN и ничего не нахожу.
2 ответа
Установите событие ondayrender объекта календаря:
<asp:Calendar ID="Calendar1" runat="server" ondayrender="MyDayRenderer">
Затем в своем коде вы можете проверить дату и установить цвет:
protected void MyDayRenderer(object sender, DayRenderEventArgs e)
{
if (e.Day.IsToday)
{
e.Cell.BackColor = System.Drawing.Color.Aqua;
}
if (e.Day.Date == new DateTime(2011,5,1))
{
e.Cell.BackColor = System.Drawing.Color.Beige;
}
}
Вот некоторый код, который я использовал в проекте долгое время назад. Там может быть лучший способ сейчас. Но это должно работать. Самым простым способом, который я смог найти, было окунуться в событие DayRender.
Я использовал это, чтобы выделить определенные дни, которые были забронированы, ожидают или доступны для аренды недвижимости.
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
for (int x = 0; x < ar.Count; x++)
{
//if the date is in the past, just mark it as booked.
if (e.Day.Date < DateTime.Now)
{
e.Cell.BackColor = System.Drawing.Color.FromArgb(38, 127, 0);
e.Cell.ForeColor = System.Drawing.Color.White;
}
if (e.Day.Date.ToShortDateString() == Convert.ToDateTime(((ListItem)ar[x]).Text).ToShortDateString())
{
switch (((ListItem)ar[x]).Value)
{
case "1":
e.Cell.BackColor = System.Drawing.Color.FromArgb(220,220,220);
break;
case "2":
e.Cell.BackColor = System.Drawing.Color.FromArgb(38,127,0);
e.Cell.ForeColor = System.Drawing.Color.White;
break;
case "3":
if (e.Day.IsWeekend)
{
e.Cell.BackColor = System.Drawing.Color.FromArgb(255,255,204);
}
else
{
e.Cell.BackColor = System.Drawing.Color.White;
}
break;
default:
e.Cell.BackColor = System.Drawing.Color.White;
break;
}
}
}
}