- •4.6. Работа со связанными таблицами в Windows-формах 42
- •4.7. Представление связанных таблиц в элементе управления DataGrid 54
- •4.7.1. Создание Windows-формы 54
- •4. Построение Windows-приложений с доступом к данным через adо.Net
- •4.1. Создание Windows-приложения
- •4.2. Windows-форма как основа интерфейса
- •4.3. Доступ к данным в Windows-формах с использованием элемента управления DataGrid
- •4.3.1. Создание проекта и формы
- •4.3.2. Создание набора данных DataSet
- •Создание и конфигурирование элементов доступа к данным Connection и DataAdapter
- •Создание объекта DataSet
- •4.3.3. Добавление элемента управления DataGrid для отображения данных
- •4.3.4. Заполнение элемента управления DataGrid данными
- •4.3.5. Обновление информации в базе данных
- •4.4. Доступ к данным в Windows-формах с использованием текстовых полей
- •4.4.1. Связывание элементов TextBox с набором данных
- •4.4.2. Отображение номера текущей записи
- •4.5. Выборка и сортировка данных через запросы с параметрами
- •4.5.1. Создание Windows-формы
- •4.5.2. Создание и конфигурирование объектов DataConnection и DataAdapter
- •4.5.3. Создание набора данных
- •4.5.4. Добавление элементов отображения данных
- •4.5.5. Добавление кода для заполнения набора данных
- •4.5.6. Связывание текстовых полей с набором данных
- •4.5.7. Добавление навигации по записям
- •4.5.8. Отображение номера текущей записи
- •4.5.9. Тестирование работы приложения
- •4.6. Работа со связанными таблицами в Windows-формах
- •4.6.1. Создание и Windows-формы
- •4.6.2. Конфигурирование DataConnection и Data Adapter
- •4.6.3. Создание набора данных Dataset
- •4.6.4. Создание реляционных связей между таблицами набора данных
- •4.6.5. Добавление элементов отображения данных
- •Отображение издательств в элементе ListBox
- •Отображение наименований книг в элементе DataGrid
- •4.6.6. Заполнение набора данных
- •4.6.7. Тестирование приложения
- •4.7. Представление связанных таблиц в элементе управления DataGrid
- •4.7.1. Создание Windows-формы
- •4.7.2. Конфигурирование объектов DataConnection и DataAdapter
- •4.7.3. Добавление элементов управления
- •4.7.4. Заполнение набора данных и создание реляционных связей
- •4.7.5. Тестирование приложения
4.5.7. Добавление навигации по записям
В заключении добавим к форме элементы, обеспечивающие навигации по записям объекта DataSet. В этом примере мы добавим две кнопки Предыдущая и Следующая, а также добавим текстовое поле, в котором будет отображаться номер текущей записи (Рис. 4.34).
Для получения номера текущей записи таблицы данных используется свойство Position, которое доступно через объект BindingContext. Чтобы перемещаться по записям таблицы набора данных, нужно изменять значение этого свойства. Чтобы определить сколько записей находится в таблице данных, нужно получить значение свойства count объекта BindingContext. Для добавления объектов навигации выполните следующие действия.
1. Добавьте к форме две дополнительные кнопки, установив их свойства в соответствии с табл. 4.3.
|
Таблица 4.3. Свойства элементов управления Button |
Name (имя) |
Text (текст) |
BtnNext BtnPrevious |
Следующая Предыдущая |
2. Создайте обработчик события нажатия кнопки Предыдущая. Добавьте программный код декремента (уменьшения на единицу) свойства Position объекта BindingContext. Код будет выглядеть следующим образом (листинг 4.10).
Листинг 4.10
' Visual Basic
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
Me.BindingContext(DsAuthorsl, "authors").Position -=1
End Sub
// C#
private void btnPrevious_Click(object sender, System.EventArgs e)
{
this.BindingContext[dsAuthors1, "authors"].Position -=1;
}
3. Сделайте то же самое для кнопки Следующая, только увеличьте значение свойства Position на единицу (листинг 4.11).
Листинг 4.11
' Visual Basic
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles btnNext.Click
Me.BindingContext(DsAuthorsl, "authors").Position+=1
End Sub
// C#
private void btnNext_Click(object sender, System.EventArgs e)
{
this.BindingContext[dsAuthors1, "authors"].Position+=1;
}
4.5.8. Отображение номера текущей записи
Наконец, вы можете создать showPosition метод отобразить позицию текущих записей.
1. Добавьте к форме элемент TextBox, и назовите его txtPosition (рис. 4.34).
Рис. 4.34. Расположение на форме элементов навигации по записям
Примечание
Присвойте свойству Enabled значение False, чтобы пользователи могли видеть номер текущей записи, но не могли изменить его значение.
2.
Создайте в форме процедуру с именем
showPosition.
В этой процедуре получите
количество записей в таблице и номер
текущей записи от объ
екта
BindingContext
и отобразите эти значения в текстовом
поле. Программный
код листинга 4.12 демонстрирует эти
действия.
Листинг 4.12
' Visual Basic
Private Sub ShowPosition()
Dim iCnt As Integer
Dim iPos As Integer
iCnt=Me.BindingContext(DsAuthorsl, "authors").Count
If iCnt=0 Then
txtPosition.Text="(No records)"
Else
iPos=Me.BindingContext(DsAuthorsl,"authors").Position+1 txtPosition.Text=iPos.ToString & " of " & iCnt.ToString
End If
End Sub
// C#
private void ShowPosition()
{
int iCnt;
int iPos;
iCnt=this.BindingContext[dsAuthors1, "authors"].Count;
iPos=this.BindingContext[dsAuthors1, "authors"].Position+1;
if (iCnt==0)
{
txtPosition.Text="(No records)";
}
else
{
txtPosition.Text=iPos.ToString() + " of " + iCnt.ToString() ;
}
}
3. Добавьте обращение к процедуре ShowPosition в тех фрагментах приложения, где текущая запись могла измениться. Для данного примера это необходимо сделать в следующих местах:
После обращения к методу Fill в обработчике события click кнопки Показать авторов.
После изменения текущей записи в обработчике события click кнопок Предыдущая и Следующая. Например, законченный фрагмент кода для кнопки Предыдущая будет выглядеть следующим образом (листинг 4.13).
Листинг 4.13
' Visual Basic
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
Me.BindingContext(DsAuthorsl, "authors").Position -=l
ShowPosition()
End Sub
// C#
private void btnPrevious_Click(object sender, System.EventArgs e)
{
this.BindingContext[dsAuthors1, "authors"].Position -=1;
ShowPosition ();
}
