|
Программирование >> Asp.net
if (!this.IsPostBack) DateTime trialDate = DateTime.Now; calendar.SelectedDate = GetFreeDate(trialDate); Далее потребуется ответить на выбор даты в календаре. Чтобы сделать это, просто добавим обработчик события SelectionChanged календаря и выполним в нем проверку данных по существующим записям о мероприятиях. Для этого потребуется выполнить двойной щелчок на календаре в дизайнере и добавить следующий код: void calendar SelectionChanged(object sender, EventArgs e) DateTime trialDate = calendar.SelectedDate; calendar.SelectedDate = GetFreeDate(trialDate); Этот код практически идентичен тому, что есть в Page Load() . Третье место, где необходимо выполнять эту проверку - обработчик щелчка на кнопке заказа. Мы вернемся к этому ниже, поскольку перед этим нужно внести еще несколько изменений. Далее потребуется окрасить ячейки занятых дней в календаре, чтобы отметить запланированные мероприятия. Чтобы сделать это, добавим обработчик события DayRender объекта календаря. Это событие возбуждается всякий раз при отображении отдельного дня, и дает доступ к объекту отображаемой ячейки и соответствующей ей дате через свойства Cell и Date параметра DayRenderEventArgs, принимаемого функцией обработчика. Дату отображаемой ячейки мы просто сравним с датами в объекте eventTable и если найдем соответствие, окрасим, используя свойство Cell.BackColor: void calendar DayRender(object sender, DayRenderEventArgs e) if (EventData.Count > 0) DateTime testDate; foreach (DataRowView testRow in EventData) testDate = (DateTime)testRow[ EventDate ]; if (testDate.Date == e.Day.Date) e.Cell.BackColor = System.Drawing.Color.Red; Здесь используется красный цвет и получается в результате внешний вид календаря, показанный на рис. 37.11, где на 12, 15 и 22 июня 2008 г. запланированы мероприятия, а пользователь выбрал 24 июня. С добавлением логики выбора даты теперь невозможно выбрать день, окрашенный красным; если предпринять такую попытку, то выбирается следующая свободная дата (например, при попытке указать 15 июня будет выбрано 16 июня). Добавление мероприятий в базу данных Обработчик события submitButton Click() сейчас собирает строку из характеристик мероприятия и отображает ее Рис. 37.11. Внешний вид календаря в элементе управления resultLabel. Чтобы добавить запись о мероприятии в базу данных, мы просто переформатируем созданную строку в SQL-запрос INSERT и выполним его. Обратите внимание, что в среде разработки вам не нужно особо беспокоиться о безопасности. Добавление базы SQL Server 2005 Express через решение Web-сайта и конфигурирование элементов управления SqlDataSource для автоматического применения дает вам строку соединения, которую можно использовать для осуществления записи в базу данных. В более сложных ситуациях вам может понадобиться обращаться к ресурсам, используя другие учетные записи - например, учетную запись домена, которая применяется для доступа к экземпляру SQL Server, находящемуся где-то в сети. Такая возможность (через заимствование прав, службы COM+ или другим способом) присутствует в ASP.NET, но не входит в круг тем, освещаемых в этой главе. В большинстве случаев конфигурирование строки соединения не сложнее тех вещей, которые нужно получить. Большая часть следующего кода выглядит знакомо: void submitButton Click(object sender, EventArgs e) if (this.IsValid) System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (ListItem attendee in attendeeList.Items) if (attendee.Selected) { sb.AppendFormat( {0} ({1}), attendee.Text, attendee.Value); sb.AppendFormat( and {0} , nameBox.Text); string attendees = sb.ToString(); try { System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection( ConfigurationManager.ConnectionStrings[ MRBConnectionString ] .ConnectionString); System.Data.SqlClient.SqlCommand insertCommand = new System.Data.SqlClient.SqlCommand( INSERT INTO [Events] + (Name, Room, AttendeeList, EventDate) VALUES (@Name, + @Room, @AttendeeList, @EventDate) , conn); insertCommand.Parameters.Add( Name , SqlDbType.VarChar, 255).Value = eventBox.Text; insertCommand.Parameters.Add( Room , SqlDbType.Int, 4).Value = roomList.SelectedValue; insertCommand.Parameters.Add( AttendeeList , SqlDbType.Text, 16).Value = attendees; insertCommand.Parameters.Add( EventDate , SqlDbType.DateTime, 8).Value = calendar.SelectedDate; Самое интересное здесь - обращение к созданной ранее строке соединения с применением следующего синтаксиса: ConfigurationManager.ConnectionStrings[ MRBConnectionString ].ConnectionString Класс ConfigurationManager предоставляет доступ ко всей систематизированной конфигурационной информации нашего Web-приложения, сохраненной в файле Web.config. Позднее в этой главе мы рассмотрим это в деталях. После создания команды SQL мы применяем ее для вставки новой записи о мероприятии: conn.Open(); int queryResult = insertCommand.ExecuteNonQuery(); conn.Close(); ExecuteNonQuery() возвращает целочисленное значение, представляющее количество строк таблицы, обработанной запросом. Если это значение равно 1, значит, вставка записи выполнена успешно. В этом случае сообщение об успехе помещается в resultLabel, очищается EventData, поскольку она устарела, и выбор в календаре перемещается на новую свободную дату. Поскольку GetFreeDate() предполагает использование EventData, а свойство EventData автоматически обновляется, если не содержит даты, сохраняемая дата мероприятия обновляется: if (queryResult == 1) resultLabel.Text = Event Added. ; EventData = null; calendar.SelectedDate = GetFreeDate(calendar.SelectedDate.AddDays(1)); Если ExecuteNonQuery() возвращает число, отличное от 1 - это признак возникновения проблемы. Код в этом примере возбуждает исключение, если возвращается число, отличное от 1 . Это исключение перехватывается главным блоком catch, куда помещен код доступа к базе данных. Этот блок просто отображает общее уведомление об ошибке в resultLabel. else throw new System.Data.DataException( Unknown data error. ); catch resultLabel.Text = Event not added due to DB access + problem. ; На этом завершается наша версия программы заказа мероприятий с доступом к данным. Дополнительные сведения о связывании данных Как упоминалось ранее в этой главе, среди доступных Web-серверных элементов управления несколько предназначены для отображения данных (GridView, DataList, DetailsView, FormView и Repeater). Все они исключительно полезны, когда речь идет об отображении данных на Web-странице, поскольку автоматически выполняют многие задачи, которые в противном случае потребовали бы значительного объема кодирования. Для начала посмотрим, насколько просто их использовать, добавив в приложение отображаемый список мероприятий, который будет отображаться в нижней части экрана PCSWebApp3. Перетащим элемент управления GridView из панели инструментов в нижнюю часть Default.aspx и выберем источник данных MRBEventData, который был добавлен ранее (рис. 37.12).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |