Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМП по БД 5244.doc
Скачиваний:
148
Добавлен:
09.04.2015
Размер:
3.82 Mб
Скачать

Создание Web-формы Calls

1. Добавьте к проекту новую Web-форму и назовите ее Calls.aspx.

2. Разместите на Web-форме элементы управления, перечисленные в следующей таблице, и задайте их свойства, как указано в этой таблице. Элементы управления, расположенные в таблице ниже Panel, следует разместить внутри панели, чтобы облегчить контроль их отображения во время выполнения.

Элемент управления

Свойство

Значение

DropDownList

ID

drpContacts

Button

ID

butView

Text

Посмотреть звоноки

Button

ID

butAddCall

Text

Добавить звонок

Panel

ID

pnlAdd

TextBox

ID

txtDate

TextBox

ID

txtTime

TextBox

ID

txtSubject

TextBox

ID

txtNotes

TextMode

Multiline

Button

ID

butOKAdd

Button

ID

butCancelAdd

Literal

ID

litError

3. В Toolbox перейдите на вкладку Dala и перетащите на Web-форму компонент DataSet — Visual Studio откроет диалоговое окно Add Dataset, в котором установлен переключатель Typed Dataset.

4. В раскрывающемся списке Name выберите типизированный набор данных Contact- Management.dsCalls и щелкните ОК. Visual Studio добавит набор данных к Web-форме.

5. Перетащите на Web-форму элемент управления DataList с вкладки View Forms в Toolbox, поместив его ниже панели. Задайте его свойства и шаблоны, как указано в следующей таблице.

Элемент управления

Свойство

Значение

DataList

ID

dlstCalls

DataSource

dsCalls

Шаблон верхнего колонтитула DataList

Текст

нет

Calls

HTML-тэг, определяющий горизонтальную линию

нет

<HR>

Шаблон верхнего колонтитула DataList

HTML-тэг, определяющий горизонтальную линию

нет

<HR>

Шаблон элемента DataList

Label

ID

lblDate

(DataBindings)

В диалоговом окне DataBinding выберите в дереве Simple Binding элемент Conlainer.Dataltem.CallDate и задайте форматирующее выражение {0:d}.

Label

ID

lblTime

(DataBindings)

В диалоговом окне DataBinding выберите в дереве Simple Binding элемент Conlainer.Dataltem.CallDate и задайте форматирующее выражение {0:d}.

Текст

нет

Тема:

Label

ID

lblSubject

(DataBindings)

В диалоговом окне DataBinding выберите в дереве Simple Binding элемент Container.DataItem.Subject

Текст

нет

Примечание:

Label

ID

lblNotes

(DataBindings)

В диалоговом окне DataBinding выберите в дереве Simple Binding элемент Container.DataItem.Notes

Шаблон разделителя

HTML-тэг, определяющий горизонтальную линию

нет

<HR>

6. Скопируйте элемент управления Hyperlink из формы AddContact (он расположен в нижней части этой формы) и поместите его внизу формы Calls. Чтобы скопировать элемент управления, выберите его и нажмите Ctrl+C. Чтобы вставить скопированный элемент в форму Calls, шелкните форму (в режиме Design) и нажмите Ctrl+V

7. Вызовите окно Code, дважды щелкнув левой кнопкой мыши Web-форму Calls, и добавьте в начало модуля следующий оператор:

Imports System.Data.SqlClient

8. Web-форма Calls использует для доступа к данным компоненты, определенные в файле Global.asax, поэтому вам понадобятся ссылки на компоненты (они хранятся в переменных состояния), созданные во время выполнения задания 2. Ниже показан код, объявляющий ряд объектов и обрабатывающий событие Page_Load. Этот код получает ссылки на компоненты для работы с БД, делая их доступными коду формы:

Dim ContactMgmt As SqlConnection

Dim adptContacts As SqlDataAdapter

Dim adptCalls As SqlDataAdapter

Dim dsContacts As New dsContacts()

Private Sub Page_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

' Получить сеансовые переменные состояния.

ContactMgmt = Session("ContactMgmt")

adptContacts = Session("adptContacts")

adptCalls = Session("adptCalls")

dsCalls = Session("dsCalls")

dsContacts = Session("dsContacts")

' Этот код выполняется при первом отображении формы.

If Not IsPostBack Then

' Заполнить набор данных Contacts.

adptContacts.Fill(dsContacts)

' Для каждой строки таблицы...

Dim rowNext As dsContacts.ContactsRow

For Each rowNext In dsContacts.Contacts

' ...создать новый элемент списка.

Dim lstNew As New ListItem()

lstNew.Text = rowNext.FirstName & " " & rowNext.LastName

lstNew.Value = rowNext.ContactID

' добавить элемент к раскрывающемуся списку.

drpContacts.Items.Add(lstNew)

Next

' Выбрать первый элемент в списке.

drpContacts.SelectedIndex = 0

End If

End Sub

9. Web-форма Calls модифицирует набор данных Calls во время выполнения. Чтобы после обработки страницы записать набор данных обратно в переменную состояния, необходимо добавить к обработчику события Page_PreRender (это последнее событие, которое обрабатывается перед отображением страницы) следующий код:

Private Sub Page_PreRender(ByVal sender As Object, _

ByVal e As System.EventArgs) Handles MyBase.PreRender

' Записать набор данных в сеансовую переменную состояния.

Session("dsCalls") = dsCalls

End Sub

10. Добавьте к обработчикам события Click кнопок View и Add следующий код:

Private Sub butView_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles butView.Click

' Создать команду для выборки из набора данных.

adptCalls.SelectCommand.CommandText = "SELECT * FROM Calls " & _

"WHERE ContactID=" & drpContacts.SelectedItem.Value

' Очистить набор данных.

dsCalls.Clear

' Заполнить набор данных сведениями о звонках.

adptCalls.Fill(dsCalls)

' Связать элемент управления DataList с данными.

dlstCalls.DataBind()

End Sub

Private Sub butAddCall_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles butAddCall.Click

' Задать исходные значения даты и времени.

txtDate.Text = Now.ToShortDateString()

txtTime.Text = Now.ToShortTimeString()

' Сделать панель для добавления звонков видимой.

pnlAdd.Visible = True

' Деактивировзть кнопки и раскрывающийся список.

butView.Enabled = False

butAddCall.Enabled = False

drpContacts.Enabled = False

End Sub

11. Добавьте вспомогательную функцию, которая получает новое значение CalllD. Поскольку поле CalllD является первичным ключом в таблице Calls, его значение должно быть уникальным внутри БД:

' Эта функция возвращает новое уникальное значение CalllD.

Private Function GetCallID() As Integer

Dim cmdNewID As New SqlCommand("SELECT MAX(CallID)" & _

" FROM Calls", ContactMgmt)

' Открыть соединение с БД

ContactMgmt.Open()

' Получить наибольшее значение ключа.

Dim intID As Integer

' Проверить, существует ли запись

If Not (cmdNewID.ExecuteScalar() Is DBNull.Value) Then

' Получить наибольшее число...

intID = CInt(cmdNewID.ExecuteScalar())

Else

' ...или присвоить intID значение О.

intID = 0

End If

' Закрыть соединение.

ContactMgmt.Close()

' Вернуть новое значение ключа (оно будет на единицу больше прежнего).

Return intID + 1

End Sub

12. Добавьте к обработчикам событий кнопок ОК и Cancel код, показанный ниже. Он очень похож на обработчики событий, использованные для добавления (или отмены добавления) записей в таблицу Contacts (см. предыдущее задание).

Private Sub butOKAdd_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles butOKAdd.Click

Dim rowNew As dsCalls.CallsRow

rowNew = dsCalls.Calls.NewCallsRow

rowNew.ContactID = drpContacts.SelectedItem.Value

rowNew.CallID = GetCallID()

rowNew.CallDate = txtDate.Text

rowNew.CallTime = txtDate.Text & " " & txtTime.Text

rowNew.Subject = txtSubject.Text

rowNew.Notes = txtNotes.Text

' Добавить строку к набору данных со сведениями о звонках.

dsCalls.Calls.AddCallsRow(rowNew)

Try

adptCalls.Update(dsCalls)

' Скрыть панель добавления звонков.

pnlAdd.Visible = False

' Очистить поля.

txtSubject.Text = ""

txtNotes.Text = ""

' Активировать другие элементы управления.

butView.Enabled = True

butAddCall.Enabled = True

drpContacts.Enabled = True

Catch ex As Exception

' Отобразить сообщение об ошибке.

litError.Text = "Во время исполнения произошла ошибка" & _

"the call:<br>" & _

ex.Message & "<br>" & _

"Исправте ошибку и повторите попытку" & _

"< br>"

End Try

End Sub

Private Sub butCancelAdd_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles butCancelAdd.Click

' Скрыть панель добавления звонков.

pnlAdd.Visible = False

' Очистить поля.

txtSubject.Text = ""

txtNotes.Text = ""

' Активизировать другие элементы управления.

butAddCall.Enabled = True

drpContacts.Enabled = True

End Sub

Задание 6. Создание форм DeleteContact и ContactTypes

До сих пор мы разбирали создание каждой Web-формы шаг за шагом. Теперь вы попробуете сделать это самостоятельно.

Итак, вам необходимо создать Web-формы DeleteContact и ContactTypes, которые должны:

  • использовать компоненты доступа к данным, определенные в файле Global.asax;

  • манипулировать БД. Форма DeleteContact отвечает за удаление из БД сведений о контактных лицах, а форма ContactTypes — за просмотр и добавление новых типов контактных лиц;

  • использовать транзакции с наборами данных (см. описание форм AddContact и Calls);

  • предоставлять пользователю возможность вернуться на форму SwitchBoard.

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