- •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.7.3. Добавление элементов управления
В этом разделе примера мы добавим на форму два элемента управления. Это будут DataGrid для отображения информации и Button для получения записей из базы данных.
На вкладке Windows Form окна Toolbox, выделите элемент управления DataGrid и перенесите его на форму.
Аналогично перенесите элемент управления Button. Войдите в окно Properties этого элемента и в поле свойства Text наберите значение Загрузить.
Расположите элементы управления на форме как показано на рис. 4.46. На этом работа с элементами управлении будет закончена. Все остальные действия будут выполнены в программном коде.
Рис. 4.46. Расположение элементов управления на форме
4.7.4. Заполнение набора данных и создание реляционных связей
В нашем наборе данных будет содержаться три таблицы, которые в базе данных имеют отношения "один ко многим". Однако, набор данных — это пассивный контейнер, который не может использовать те связи между таблицами, которые заданы в базе данных. В объекте DataSet реляционные отношения между таблицами нужно будет задавать явно, через его свойство Relations.
Для начала нужно будет создать экземпляр класса DataSet, открыть соединение и заполнить набор данных. Причем в объекте DataSet будет содержаться три самостоятельных таблицы: Customers, Orders и Order Details. Несмотря на то, что таблицы на уровне базы данных имеют реляционные связи, в DataSet этих связей не будет, все три таблицы будут совершенно независимы друг от друга. Реляционные связи нужно создать самим, воспользовавшись свойством Relations объекта DataSet. В нашем примере главной родительской таблицей является таблица с информацией о заказчиках — Customers. Для нее дочерней таблицей является таблица с информацией о заказах — Orders. Эти две таблицы имеют связующее ключевое поле CustomerID. В свою очередь таблица Orders является родительской таблицей по отношению к таблице с данными о деталях заказов— Order Details. Эти две таблицы имеют связующее ключевое поле OrderID. Схема связей между таблицами приведена на рис. 4.47.
Рис. 4.47. Схема связей между таблицами
Элемент отображения данных на форме DataGrid не связан с набором данных и он не заполняется данными автоматически. Эти процессы нужно активизировать с помощью команд программного кода.
1- Дважды щелкните мышью на кнопке формы, чтобы создать обработчик cобытия нажатия кнопки Button1_Click.
2. В обработчике события выполним следующие действия:
создадим экземпляр класса DataSet (набор данных ds);
откроем соединение;
заполним данными объект DataSet (набор данных ds);
закроем соединение;
создадим реляционную связь между таблицами customers, Orders;
созданим реляционную связь между таблицами Orders и Order Details;
укажем объекту DataGrid в качестве источника данных набор данных ds;
• зададим объекту DataGrid отобразить таблицу customers.
Ниже приведен соответствующий программный код (листинг 4.16).
Листинг 4.16
' Visual Basic
Private Sub Buttonl_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles Buttonl.Click
Dim ds As New DataSet ()
SqlConnectionl.Open()
SqlDataAdapterl.Fill(ds, "Customers")
SqlDataAdapter2.Fill(ds, "Orders")
SqlDataAdapter3.Fill(ds, "OrderDetails")
SqlConnectionl.Close()
ds.Relations.Add("Заказы",ds.Tables("Customers").Columns("CustomerlD"), _
ds.Tables("Orders").Columns("CustomerlD"))
ds.Relations.Add("Детали заказа",ds.Tables("Orders").Columns("OrderlD"), _
ds.Tables("OrderDetails").Columns("OrderlD"))
DataGridl().DataSource=ds
DataGridl().DataMember="Customers"
End Sub
// C#
private void Buttonl_Click (object sender, System.EventArgs e)
{
DataSet ds;
sqlConnection1.Open ();
sqlDataAdapter1.Fill(ds, "Customers");
sqlDataAdapter2.Fill(ds, "Orders");
sqlDataAdapter3.Fill(ds, "OrderDetails");
sqlConnection1.Close ();
ds.Relations.Add("Заказы",ds.Tables["Customers"].Columns["CustomerID"],
ds.Tables["Orders"].Columns["CustomerlD"]);
ds.Relations.Add("Детали заказа", ds.Tables["Orders"] .Columns["OrderID"],
ds.Tables["OrderDetails"].Columns["OrderlD"]); DataGrid1.DataSource=ds;
DataGrid1.DataMember="Customers";
}