Программирование >>  Asp.net 

1 ... 6 7 8 [ 9 ] 10 11 12 13


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

Rooms

Таблица Rooms включает в себя столбцы, перечисленные в табл. 37.6. Таблица 37.6. Структура таблицы Rooms

Столбец

Примечания

Identity, первичный ключ

Идентификационный номер комнаты

Room

varchar, обязательное, 50 символов

Наименование комнаты

В базе данных содержится 20 записей о комнатах. Events

Таблица Events содержит столбцы, перечисленные в табл. 37.7. Таблица 37.7. Структура таблицы Events

Столбец

Примечания

Name Room

AttendeeList EventDate

Identity, первичный ключ varchar, обязательное, 255 символов int, обязательное text, обязательное datetime, обязательное

Идентификационный номер мероприятия

Наименование мероприятия

ID комнаты проведения мероприятия

Список имен участников

Дата события

В загруженной базе данных присутствует несколько записей о мероприятиях.

Привязка к базе данных

Мы привяжем к данным два элемента управления - attendeeList и roomList. Прежде чем сделать это, необходимо добавить Web-серверные элемента: управления SqlDataSource, отображающиеся на таблицы из базы данных MeetingRoomBooker. mdf. Самый быстрый способ сделать это - перетащить с помощью мыши из панели инструментов на Web-форму Default.aspx и настроить его посредством мастера конфигурации. На рис. 37.10 показано, как использовать этот мастер для элемента управления SqlDataSource.

На первой странице мастера настройки источника данных необходимо выбрать соединение с созданной ранее базой. Затем сохраните строку соединения как MRBConnectionString, после этого выберите * (все поля) из таблицы Attendees базы данных.


Рис. 37.10. Врезов мастера конфигурации для элемента управления SqlDataSource



После завершения работы мастера измените ID элемента управления SqlDataSource на MRBAttendeeData. Вам нужно также добавить и сконфигурировать еще два элемента управления SqlDataSource для получения данных из таблиц Rooms и Events - это элементы MRBRoomData и MRBEventData, соответственно. Для их подключения используйте сохраненную строку MRBConnectionString.

Добавив эти источники данных, мы увидим в коде формы очень простой синтаксис:

<asp:SqlDataSource ID= MRBAttendeeData runat= server

ConnectionString= <%$ ConnectionStrings:MRBConnectionString %>

SelectCommand= SELECT * FROM [Attendees] ></asp:SqlDataSource>

<asp:SqlDataSource ID= MRBRoomData runat= server

ConnectionString= <%$ ConnectionStrings:MRBConnectionString %> SelectCommand= SELECT * FROM [Rooms] ></asp:SqlDataSource>

<asp:SqlDataSource ID= MRBEventData runat= server

ConnectionString= <%$ ConnectionStrings:MRBConnectionString %>

SelectCommand= SELECT * FROM [Events] ></asp:SqlDataSource>

Определение используемой строки соединения находится в файле web.config, который мы рассмотрим в настоящей главе чуть позже.

Далее потребуется установить свойства привязки элементов управления roomList и attendeeList. Для roomList необходимые настройки будут следующими:

□ DataSourceID- MRBRoomData

□ DataTextField - Room

□ DataValueField - ID

Аналогично следует установить свойства привязки для attendeeList:

□ DataSourceID - MRBAttendeeData

□ DataTextField - Name

□ DataValueField - ID

В результате запуска этого приложения получим полный доступ к информации о комнатах и участниках совещаний через привязанные к данным элементы управления. Элемент MRBEventData используем чуть позже.

Настройка календаря

Прежде чем добавлять события в базу данных, нам нужно несколько модифицировать отображение календаря. Было бы неплохо иметь возможность показать другим цветом дни, на которые уже приняты заказы на конкретную комнату, дабы предотвратить повторный выбор этих дней. Требуемые модификации касаются способа установки дат в календаре и способа отображения ячеек-дней.

Начнем с выбора дат. При заказе мероприятия дат: нужно проверять в трех местах и соответствующим образом изменять выбор: когда устанавливается начальная дата в Page Load() , когда пользователь пытается выбрать дату из календаря, и когда мероприятие заказывается, а мы хотим установить новую дату для предотвращения повторного заказа на один и тот же день. Поскольку, похоже, что это должно быть часто используемым средством, можно создать приватный метод для реализации таких вычислений. Этот метод должен принимать в качестве параметра пробную дату и возвращать доступную, которая должна либо совпадать с пробной, либо представлять следующий свободный день после пробной даты.

Прежде чем добавить этот метод, нашему коду нужно предоставить доступ к таблице Event. Для этого можно воспользоваться элементом управления MRBEventData, потому что он способен наполнить DataView. Чтобы облегчить это, добавим следующий приватный метод и свойство:



private DataView eventData; private DataView EventData

if (eventData == null)

eventData =

MRBEventData.Select(new DataSourceSelectArguments()) as DataView;

return eventData;

eventData = value;

Свойство EventData присваивает члену eventData значение требуемой даты с результатом, кэшированным для последующего использования. Здесь мы вызываем метод SqlDataSource.Select() для получения DataView.

Далее добавим этот метод GetFreeDate() в файл отделенного кода:

private DateTime GetFreeDate(DateTime trialDate)

if (EventData.Count > 0)

DateTime testDate; bool trialDateOK = false; while (!trialDateOK)

trialDateOK = true;

foreach (DataRowView testRow in EventData)

testDate = (DateTime)testRow[ EventDate ]; if (testDate.Date == trialDate.Date)

trialDateOK = false; trialDate = trialDate.AddDays(1);

return trialDate;

Этот простой код использует DataView по имени EventData для извлечения данных о мероприятиях. Сначала мы проверяем тривиальный случай, когда на заказанный день ничего не запланировано - при этом можно просто подтвердить заказанную дату, возвратив ее. Затем выполняем итерацию по датам в таблице Event, сравнивая их с пробной датой. Если находим совпадение, добавляем один день к пробной дате и повторяем поиск.

Извлечение даты из DataTable достаточно просто:

testDate = (System.DateTime)testRow[ EventDate ];

Приведение данных столбца к System.DateTime работает хорошо.

Первое место, где будет использоваться getFreeDate() - опять-таки Page Load(). Это означает внесение небольших изменений в код, устанавливающий свойство календаря SelectDate:



1 ... 6 7 8 [ 9 ] 10 11 12 13

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика