16. В диалоговом окне Generate the SQL statements укажите команду SELECT * FROM tblOrder для загрузки данных в объект — набор данных.
17. По окончании работы с программой-мастером Data Adapter Configuration Wizard укажите значение daOrders для свойства (Name) для созданного объекта — адаптера данных.
В верхней части файла введите следующий код:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb
Затем в определении класса формы frmOrders введите код из листинга 7.7.
Private dvOrders As New DataView()
Private Sub frmShowOrders_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim rel As DataRelation
' Вставка таблиц в набор данных
dsCustOrders. daCustomers.Fill(dsCustOrders, "Customers")
daOrders.Fill(dsCustOrders, "Orders")
' Создание отношения между таблицами.
rel = dsCustOrders.Relations.Add("relCustOrders", _
dsCustOrders.Tables("Customers").Columns("ID"), _
dsCustOrders.Tables("Orders").Columns("CustomerID"))
' Указание первичного ключа для таблицы Customers.
Dim pk(0) As DataColumn
pk(0) = dsCustOrders.Tables("Customers").Columns("ID")
dsCustOrders.Tables("Customers").PrimaryKey = pk
' Указание сортировки по умолчанию для метода Find.
dsCustOrders.Tables("Customers").DefaultView.Sort = "ID"
End Sub
Private Sub btnFind_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFind.Click
Dim RowNum As Integer
Dim dvRow As DataRowView
Dim i As Integer
If IsNumeric(txtCistID.Text) Then
RowNum = dsCustOrders.Tables("Customers"). _
DefaultView.Find(txtCustID.Text)
If RowNum <> -1 Then
dvRow = dsCustOrders.Tables("Customers").DefaultView(RowNum)
' Вставка в поле со списком имен полей из таблицы Customer.
lstCustomer.Items.Clear()
For i = 0 To dsCustOrders.Tables("Customers").Columns.Count – 1
lstCustomer.Items.Add(dvRow.Item(i))
Next
grdOrders.CaptionText = _
"Orders for customer #" & txtCustID.Text
' Извлечение связанных дочерних записей для
' указанного клиента таблицы Customer.
dvOrders = dvRow.CreateChild("relCustOrders")
grdOrders.DataSource = dvOrders
Else
MessageBox.Show( _
"CustomerID not found – Please try again.")
' "Клиент CustomerID не найден – Попробуйте еще раз."
txtCustID.Clear()
End If
Else
Beep()
End If
End Sub
Все параметры источников данных задаются в подпрограмме frmShowOrders_Load. Затем создаются две таблицы для набора данных DataSet и отношение DataRelation между ними.
Щелчок на кнопке Find приводит к выполнению нескольких операций, которые определены в коде подпрограммы btnFind_Click. После проверки числового типа значения в поле txtCustID начинается поиск этого значения в представлении DefaultView таблицы Customers. Если указанное значение найдено, то в поле со списком DataRowView будут показаны значения всех полей искомой записи с заданным идентификатором из таблицы Customers, а в сетке данных справа будут показаны ее дочерние записи из таблицы Orders.