Создание приложения для просмотра данных
Создание приложения для просмотра данных
В предыдущем примере показан простейший способ связывания данных на основе извлечения всей таблицы и отображения ее в элементе управления 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.
Private Sub ShowDataStatus()
With Me.bindingContext(DsCustomer1, "tblCustomer")
lblDataStatus. Text = "Record " + s.Position + 1 & " of " & .Count
End With
End Sub
3. Поместите вызов этой подпрограммы ShowDataStatus в подпрограммы обработки событий загрузки формы (Forml_Load) и щелчков мыши на обеих кнопках (btnNext_Click и btnPrevious_Click). Это позволит отображать обновленную информацию о текущем количестве записей и текущей записи при загрузке формы и после каждого перемещения к другой записи. Учтите, что отсчет текущего номера записи (свойство Position объекта DataBindings) начинается с нуля (как и во всех коллекциях на платформе.NET). Поэтому для получения реального номера записи следует прибавить к нему 1.
4. Запустите приложение и попробуйте перейти к разным записям таблицы. Тогда в ярлыке будет отображено общее количество записей в таблице и номер текущей записи.