Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПИС ИМОП 2.doc
Скачиваний:
4
Добавлен:
23.08.2019
Размер:
6.07 Mб
Скачать

4.7.3. Добавление элементов управления

В этом разделе примера мы добавим на форму два элемента управления. Это будут DataGrid для отображения информации и Button для получения записей из базы данных.

  1. На вкладке Windows Form окна Toolbox, выделите элемент управления DataGrid и перенесите его на форму.

  2. Аналогично перенесите элемент управления 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";

}