| Столбец | Тип | Примечания |
|---|---|---|
ID | AutoNumber, первичный ключ | Идентификационный номер помещения |
Room | Text, требуемое значение, 50 символов | Название помещения |
Таблица Events содержит следующие столбцы:
| Столбец | Тип | Примечания |
|---|---|---|
ID | AutoNumber, первичный ключ | Идентификационный номер события |
Name | Text, требуемое значение, 255 символов | Название события |
Room | Number, требуемое значение | Идентификатор помещения для события |
AttendeeList | Memo, требуемое значение | Список имен почетных гостей |
EventData | Date/Time, требуемое значение | Дата события |
Несколько событий представлены в загружаемой базе данных.
Соединение с базой данных
Два элемента управления, которые мы хотели бы связать с данными, — attendeeList и roomList. Чтобы сделать это, мы должны задать свойства DataSource этих элементов управления как таблицы, содержащие данные. Код должен загрузить данные в эти таблицы и выполнить соединение. Оба эти элемента управления имеют также свойства DataTextField и DataValueField, которые определяют, какие столбцы использовать для вывода элементов списка и задания свойств value, соответственно. В обоих случаях можно задать эти свойства во время проектирования как Name и ID, что будет использоваться, как только задается свойство DataSource для заполнения элементами списка элемента управления.
Теперь мы можем сделать это в построителе форм Web. Удалите существующие записи из кода ASP.NET для этих элементов управления. Теперь что объявления будут выглядеть следующим образом:
...
<asp:dropdownlist id='roomList' runat='server' width='160px' datatextfield='Room' datavaluefield='ID' / >
...
<asp:listbox id='attendeeList' runat='server' width='160px' selectionmode='Multiple' rows='6' datatextfield='Name' datavaluefield=' ' >
Следующая задача состоит в создании соединения с базой данных. Существует несколько способов это сделать. Как мы видели в главе ADO.NET ранее, обычно для создания нового соединения используется окно Server Explorer. Так как мы работаем с Access, то тип провайдера для этого соединения будет Microsoft Jet 4.0 OLE DB Provider. Когда это будет задано в окне сервера, мы сможем перетащить соединение на форму Web, что добавит объект Data.OleDb.OleDbConnection к форме с именем oleDbConnection1:
public class WebForm1: System.Web.UI.Page {
...
protected System.Data.OleDb.OleDbConnection oleDbConnection1;
SqlClient.SqlConnection.
В метод InitializeComponent() также добавится код для задания свойства ConnectionString формы oleDbConnection1, таким образом все будет готово для использования в коде.
Мы хотим выполнить соединение данных в обработчике событий Page_Load(), так что элементы управления будут полностью заполнены, когда мы захотим использовать их в других частях кода. Приступаем к считыванию данных из базы данных, независимо от того, выполняется ли в данный момент операция обратной отправки (даже если элементы управления списком будут сохранять свое содержимое с помощью viewstate), чтобы гарантировать, что мы имеем доступ ко всем данным, которые могут понадобиться, хотя нам и не нужно выполнять само соединение данных при обратной отправке. Это может показаться слегка расточительным, но читатель при желании может в качестве упражнения добавить дополнительную логику к коду для оптимизации такого поведения. Здесь мы сосредоточимся на том, как заставить все работать, не входя в практические детали.
Весь наш код будет помещен между вызовами методов Open() и Close() нашего объекта соединения:
private void Page_Load(object sender, System.EventArgs e) {
validationSummary.Enabled = false;
