Обработка баз данных на Visual Basic®.NET - Джеффри Мак-Манус
Шрифт:
Интервал:
Закладка:
В приведенных ранее примерах создана база данных, которая вполне подходит для ознакомления с основными принципами создания связанного с данными пользовательского интерфейса. В следующих разделах демонстрируются способы создания связанных с базой данных приложений на основе Windows Forms.
Подключение к базе данных и работа с записями
Нет ничего проще, чем создать приложение на основе Windows Forms. И в этом заявлении нет никакого преувеличения; более того, если вас интересует лишь просмотр содержимого базы данных, вам вообще не придется писать ни единой строки кода. Весь процесс состоит из двух этапов: подключение к базе данных и связывание последнего пользовательского интерфейса с источником данных, генерированным Visual Studio .NET. Для этого выполните перечисленные ниже действия.
1. В Visual Studio .NET создайте новый проект на основе Windows Forms и откройте новую форму Form1.
2. В окне Server Explorer найдите созданную ранее таблицу tblCustomer и перетащите ее из окна Server Explorer в форму Form1.
3. После этого в нижней части окна с формой Form1 появятся объекты SqlConnection1 и SqlDataAdapter1.
Для извлечения и отображения данных используются три объекта: объект SqlConnection1 создает подключение к базе данных, объект-адаптер SqlDataAdapter1 извлекает данные, а объект DataSet сохраняет данные, извлеченные адаптером SqlDataAdapter1. Для создания объекта DataSet выполните следующее.
1. Выберите команду меню Data→Generate Dataset (Данные1→Генерация набора данных), и на экране появится диалоговое окно Generate Dataset.
2. Воспользуйтесь всеми заданными по умолчанию параметрами и щелкните на кнопке OK. В результате будет создан новый объект DataSet11, который будет располагаться в нижней части окна под формой Form1 возле объектов SqlConnection1 иSqlDataAdapter1.
Для просмотра данных в форме создайте в форме элемент управления пользовательского интерфейса и свяжите его с только что созданным объектом DataSet11, выполнив перечисленные ниже действия.
1. Откройте панель элементов управления Toolbox с помощью команды меню View→Toolbox (Просмотр→Панель инструментов управления), перейдите во вкладку Windows Forms и найдите элемент управления DataGrid (Сетка данных). Перетащите его в форму Form1, и в ней появится экземпляр DataGrid1 объекта DataGrid.
2. Свяжите этот элемент управления с источником данных. Для этого с помощью команды меню View→Properties Window (Просмотр1→Окно свойств) откройте окно свойств Properties и выберите для свойства DataSource (Источник данных) сетки DataGrid1 источник данных DataSet11. Затем выберите для свойства DataMember (Элемент данных) сетки DataGrid1 таблицу tblCustomer.
3. Наконец, создайте код извлечения данных из базы данных и вставки их в сетку DataGrid1. Для этого дважды щелкните на форме, и в окне просмотра кода автоматически появится процедура Form1_Load. Введите в ней следующий код:
Private Sub Form1_Load(ByVal sender As System.Object , _
ByVal e As System.EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSet11)
End Sub
4. Запустите полученное приложение с помощью команды меню Debug→Start (Отладка→Запуск), и в окне приложения будут отображены данные из таблицы tblCustomer.
Здесь следует отметить одну особенность данного приложения. Все внесенные в нем изменения данных не будут отражены и сохранены в базе данных. Для их сохранения нужно создать дополнительный код вызова метода объекта DataAdapter. Эта тема рассматривается далее, в разделе об обновлении записей.
Создание приложения для просмотра данных
В предыдущем примере показан простейший способ связывания данных на основе извлечения всей таблицы и отображения ее в элементе управления DataGrid. А как отобразить только одну запись? Для этого потребуется использовать элементы управления TextBox и Button, а также создать дополнительный код.
Чтобы создать приложение для просмотра данных по одной записи из таблицы tblCustomer, выполните ряд действий.
1. В Visual Studio .NET создайте новый проект на основе Windows Forms и откройте новую форму Form1. Создайте в ней два текстовых поля, txtFirstName и txtLastName, на основе элемента управления TextBox.
2. Создайте объекты SqlConnection, SqlDataAdapter и DataSet для извлечения данных о клиентах из таблицы tblCustomer. (Необходимые для этого действия аналогичны действиям из предыдущего примера.) Как и прежде, не забудьте вызвать метод Fill объекта SqlDataAdapter в коде для инициализации объекта DataSet. (В данном примере объект DataSet имеет имя DsCustomer1. - Прим. ред.)
3. Теперь нужно создать связь между двумя текстовыми полями (txtFirstName и txtLastName) и соответствующими полями в базе данных. Для этого щелкните на текстовом поле txtFirstName и в группе свойств Data выберите подгруппу свойств (DataBindings). Это свойство содержит несколько свойств, которые следует установить для связывания данных таблицы с текстовым полем.
4. Выберите поле FirstName таблицы tblCustomer для свойства Text текстового поля txtFirstName. Для этого щелкните в правой части поля со списком возле свойства Text. Выберите набор данных DsCustomer1, таблицу tblCustomer и поле FirstName, как показано на рис. 1.14.
РИС. 1.14. Создание связи между данными из поля базы, данных и текстовым полем с помощью свойств (DataBindings)
5. Аналогично свяжите текстовое поле txtLastName с полем LastName таблицы tblCustomer.
6. Запустите приложение, в текстовых полях которого будут отображены имя и фамилия первого клиента.
Возможности этого приложения весьма ограниченны, потому что в нем можно просматривать только по одной записи и нельзя редактировать данные. Однако оно является базовым приложением, на основе которого будут созданы несколько других примеров с более широкими возможностями рабочего приложения для полномасштабной работы с базами данных.
Даже в таком ограниченном примере очевидны преимущества способов связывания данных на платформе .NET: они более гибки, чем аналогичные способы в Visual Basic 6. Например, упомянутая гибкость достигается за счет способности управлять процессом связывания с помощью кода.
Попробуем теперь создать код для перехода от одной записи к другой с помощью перечисленных ниже действий.
1. Создайте две кнопки, btnNext и btnPrevious, для перехода к следующей и предыдущей записям.
2. Дважды щелкните на кнопке btnNext и в автоматически появившемся окне редактирования кода с определением процедуры btnNext_Click вставьте следующий код:
Private Sub btnNext_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnNext.Click
Me.BindingContext(DsCustomer1, "tblCustomer").Position += 1
End Sub
3. Дважды щелкните на кнопке btnPrevious и в автоматически появившемся окне редактирования кода с определением процедуры btnPrevious_Click вставьте код
Private Sub btnPrevious_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnPrevious.Click
Me.BindingContext(DsCustomer1, "tblCustomer").Position -= 1
End Sub
4. Снова запустите приложение и убедитесь в том, что с помощью созданных кнопок можно переходить к следующей и предыдущей записям. (Учтите, что эта программа будет работать только при наличии нескольких записей в таблице.)
Объект BindingContext предоставляет средства организации перехода к другим записям в приложении для работы с данными. При создании таких приложений в предыдущих версиях Visual Basic для организации переходов к другим записям требовалось использовать элемент управления Data. На платформе .NET выделен, специальный объект BindingContext, который отвечает за связывание данных. (Иными словами, выделение небольшого специализированного объекта из более крупного общего объекта позволяет распределить специализированные функции среди нескольких объектов меньшего размера.) В объектно-ориентированном программировании разработчик стремится создавать специализированные объекты, чтобы упростить структуру программы и сделать ее более гибкой.
Таким образом, при создании приложения, рассчитанного на работу с базами данных, для составления запросов, обновления данных, связывания элементов управления пользовательского интерфейса с данными и перехода к полям таблицы не рекомендуется использовать один громоздкий объект Data. Вместо него в Windows Forms и ADO.NET предусмотрено несколько отдельных специализированных объектов. Выделение функций доступа к данным – ключевое достоинство платформы .NET Framework (этот вопрос подробно рассматривается в следующих главах).
Объект BindingContext является членом семейства объектов Windows Forms (а точнее, членом пространства имен System.Windows.Forms платформы .NET Framework) и содержит множество полезных свойств и методов. Например, объект BindingContext можно использовать для определения количества записей в источнике данных так, как описано ниже.
1. Создайте ярлык lblDataStatus с помощью элемента управления Label с пустой строкой в свойстве Text.
2. В коде формы создайте подпрограмму ShowDataStatus с указанным ниже кодом, которая будет отображать текущее расположение записи и общее количество записей в ярлыке lblDataStatus.