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



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

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

2. Аналогично перенесите элемент управления Button. Войдите в окно Propertiesэтого элемента и в поле свойства Text наберите значение Загрузить.

Расположите элементы управления на форме как показано на рис. 4.46. На этом работа с элементами управлении будет закончена. Все остальные действия будут выполнены в программном коде.

 

 

Рис. 4.46. Расположение элементов управления на форме

 

Заполнение набора данных и создание реляционных связей

В нашем наборе данных будет содержаться три таблицы, которые в базе данных имеют отношения "один ко многим". Однако, набор данных — это пассивный контейнер, который не может использовать те связи между таблицами, которые заданы в базе данных. В объекте 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";

}

Тестирование приложения

Теперь можно выполнить тестирование приложения, чтобы удостовериться в корректности ее работы и возможности отображения в DataGrid содержимого связанных таблиц.

Для проверки работы приложения выполните следующие действия.

1. Нажмите клавишу <F5> для запуска приложения.

2. Когда форма будет отображена на экране, вы увидите пустой элемент DataGrid. Нажмите кнопку Загрузить,после этого элемент управления DataGrid заполнится записями из таблицы Customers, содержащей сведения о заказчиках (рис. 4.48).

 

 

Рис. 4.48. Отображение в DataGrid родительской таблицы Customers

 

Наименования колонок объекта DataGrid получат значения от наименований соответствующих полей базы данных. В первой колонке будет располагаться указатель текущей записи и знак (+), позволяющий получить доступ к записям дочерних таблиц. Щелкните мышью на значке (+) в любой строке, в DataGrid появится дополнительная строка с ссылкой на содержимое дочерней таблицы (в нашем случае появиться ссылка с надписью Заказы(рис. 4.49).

 

 

Рис. 4.49. Отображение в DataGrid ссылки на дочернюю таблицу с информацией о заказах

Как видно из рис. 4.49, мы получили возможность просмотреть все заказы клиента с именем ANTON. Нажмите на ссылку Заказы,после этого запись с информацией о заказчике ANTON будет перенесена в верхнюю часть DataGrid, а в самом элементе управления появятся записи из дочерней таблицы Orders (рис. 4.50). В нашем случае будут отображены сведения о заказах, сделанных заказчиком anton.

 

 

Рис. 4.50. Отображение в DataGrid информации из родительской таблицы Customers и дочерней таблицы Orders

 

В левой крайней колонке снова будет виден значок с надписью (+), нажав на него, мы увидим еще одну строку со ссылкой Детали заказа(рис. 4.51).

 

 

Рис. 4.51. Отображение в DataGrid ссылки на дочернюю таблицу с информацией о деталях заказа

Тоесть теперь, нажав на ссылку Детали заказамы сможем получить содержимое любого заказа. При этом в верхней части DataGrid появится еще одна строка с указанием номера отображенного заказа (рис. 4.52).

 

 

Рис. 4.52. Отображение в DataGridинформации из родительских таблиц Customer, Ordersи дочерней таблицы Orders Details

Знак (+) в левой колонке исчез — это говорит о том, что у данной таблицы нет дочерних таблиц, и она в иерархии реляционных связей является последней.

Справа и слева верхней части DataGrid появились две кнопки, которые позволяют просмотреть колонки родительских таблиц, не поместившиеся на  экран. В правом верхнем углу имеется стрелка, нажав на которую можно закрыть дочернюю таблицу и подняться на один уровень вверх (вернуть на экран содержимое родительской таблицы). Кроме того, данный DataGrid позволяет выполнить сортировку любой таблицы на любом уровне иерархии по любой колонке. Для этого достаточно щелкнуть мышью на заголовке колонки. После этого в заголовке колонки появится небольшая стрелка, указывающая порядок сортировки (по возрастанию или убыванию). При повторном щелчке на той же колонке порядок сортировки меняется на обратный.

Этот пример достаточно убедительно демонстрирует преимущество Visual Studio .NET. Нам удалось реализовать возможность отобразить в одном визуальном элементе три взаимосвязанные таблицы с возможностью их сортировки по любому признаку. При этом было написано всего 10 строк программного кода.


Дата добавления: 2018-02-15; просмотров: 314; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!