foreach (System.Data.DataRow testRow in eventTable.Rows) {
testDate = (System.DateTime)TestRow["EventDate"];
if (testDate.Date == trialDate.Date) {
trialDateOK = false;
trialDate = trialDate.AddDays(1);
}
}
}
}
return trialDate;
}
Этот
простой код использует объект
eventTable
, который заполняется в
Page_Load
, для извлечения данных о мероприятии. Сначала мы проверяем тривиальный случай, где не заказано никаких мероприятий, в этом случае мы можем просто подтвердить пробную дату, возвращая ее. Затем мы просматриваем даты в таблице
Event
, сравнивая их с пробной датой. Если мы находим совпадение, то добавляем один день к пробной дате и снова выполняем поиск.
Извлечение даты из
DataTable
удивительно просто:
testDate = (System.DateTime)testRow["EventDate"];
Преобразование данных столбца в
System.DateTime
работает прекрасно.
Итак, прежде всего используем
getFreeDate
в
Page_Load
. Это просто означает внесение небольшого изменения в код, который задает свойство календаря
SelectedDate
:
if (!this.IsPostBack) {
System.DateTime trialDate = System.DateTime.Now;
calendar.SelectedDate = getFreeDate(trialDate);
this.DataBind;
}
Затем нам нужно ответить на выбор даты в календаре. Чтобы сделать это, просто добавим обработчик событий для события календаря
SelectionChanged
и выполним сравнение даты с датами существующих мероприятий:
Третий момент, когда необходимо выполнить эту проверку, возникает при нажатии кнопки заказа. Мы вернемся к этому немного позже, так как мы должны внести несколько изменений.
Затем мы хотим изменить цвет ячейки дня календаря, чтобы обозначить существующие мероприятия. Чтобы сделать это, необходимо добавить обработчик событий для события
DayRender
объекта календаря. Это событие происходит всякий раз при изображении отдельного дня и предоставляет нам доступ к объекту выводимой ячейки и дате этой ячейки с помощью свойств
Cell
и Date параметра
DayRenderEventArgs
функции обработчика. Нам нужно просто сравнить дату изображаемой
fоreach (System.Data.DataRow testRow in eventTable.Rows) {
testDate = (System.DateTime)testRow["EventDate"];
if (testDate.Date == e.Day.Date) {
e.Cell.BackColor = Color.Red;
}
}
}
}
В данном случае используется красный цвет, который дает нам следующее изображение:
Здесь 15, 27, 28, 29 и 30 марта содержат мероприятия, а пользователь выбирает 17 марта. Теперь, после добавления логики выбора даты, невозможно выбрать день, который показан красным цветом, и если делается такая попытка, то вместо этого будет выбрана следующая дата. Например, щелчок на 28 марта в показанном выше календаре приведет к выбору 31 марта.
Запись мероприятий в базу данных
Обработчик событий
submitButton_Click
в настоящее время собирает строку из характеристик мероприятия и выводит ее в элементе управления
resultLabel
. Чтобы добавить мероприятие в базу данных, нужно реформатировать созданную строку в запрос SQL