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

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


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).



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

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