Управление календарем — выделение дат программно

#c# #asp.net #calendar

#c# #asp.net #Календарь

Вопрос:

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

По сути, я хочу сделать календарь.HighlightDate («5/1/11») => imaginary lol Я знаю, что это должно быть просто, но я просматриваю свойства в MSDN и ничего не нахожу.

Ответ №1:

Установите событие ondayrender для объекта calendar:

 <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;
        }
    }
  

Комментарии:

1. Прости, Джон, я вошел в систему и просто увидел первый ответ, у меня была беспокойная неделя

Ответ №2:

Вот некоторый код, который я использовал в проекте ДАВНЫМ-давно. Возможно, сейчас есть способ получше. Но это должно сработать. Самый простой способ, который я смог найти, это погрузиться в событие 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;
            }
        }
    }
}