Чтение онлайн

на главную - закладки

Жанры

Обработка баз данных на Visual Basic®.NET

Прайс Кевин Т.

Шрифт:

 DisplayRelations(dsEmployeeInfo)

End Sub

Private Sub DisplayRelations(ByVal ds As DataSet)

 Dim rel As DataRelation

' Вывод имен полей созданного отношения.

 Me.lstOutput.Items.Add("")

 Me.lstOutput.Items.Add("DISPLAY RELATIONS")

 For Each rel In ds.Relations

' Вывод имени отношения.

Me.lstOutput.Items.Add("NAME: " & rel.RelationName)

'
Вывод имени родительской таблицы и ее поля,

' которое входит в созданное отношение.

Me.IstOutput.Items.Add("PARENT: " & _

rel.ParentTable.ToString & " – " & _

rel.ParentColumns(0).ColumnName)

' Вывод имени дочерней таблицы и ее поля,

' которое входит в созданное отношение.

Me.lstOutput.Items.Add("CHILD: " & _

rel.ChildTable.ToString & " – " & _

rel.ChildColumns(0).ColumnName)

 Next

 Me.lstOutput.Items.Add("")

End Sub

Сначала нужно создать объект DataRelation. Каждый объект DataSet содержит коллекцию отношений, которая доступна как свойство этого объекта Relations. Это свойство имеет тип DataRelationCollection и поддерживает несколько перегруженных версий метода Add. Версия, использованная в листинге 5.6, принимает три аргумента: имя отношения, ссылку на объект DataColumn в родительской таблице, а также ссылку на объект DataColumn в дочерней таблице. Если отношение между таблицами охватывает более одного поля, то следует использовать другую версию метода Add с аргументами-массивами объектов DataColumn.

Подпрограмма DisplayRelations циклически обходит все отношения свойства Relations объекта DataSet и выводит в текстовом поле имя отношения, имя родительской таблицы и ее поле, которое входит в созданное отношение, а также имя дочерней таблицы и ее поле, которое входит в созданное отношение.

НА ЗАМЕТКУ

Для создания более обобщенной версии подпрограммы DisplayRelations можно было бы вставить код циклического обхода всех полей в свойствах-массивах РаrentColumns и ChildColumns, а не просто отображать их первые элементы.

После компоновки проекта DataSetCode и запуска полученного приложения щелкните на кнопке Create Relations, и в текстовом поле будет выведена информация о вновь созданном отношении между таблицами Employees и Departments.

Кроме коллекции Relations объекта DataSet, которая содержит все отношения, определенные между таблицами объекта DataSet, каждый объект DataTable также содержит две коллекции отношений (т.е. два свойства): ParentRelations и ChildRelations, которые содержат отношения между данным объектом DataTable и связанной с ним другой (дочерней или родительской) таблицей.

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

1. Создайте новую кнопку непосредственно под кнопкой Create Relations, перетаскивая ее из панели элементов управления.

2. В окне свойств Properties укажите значение btnChildRows для свойства (Name) и значение Child Rows

для свойства Text.

3. Вставьте код, показанный в листинге 5.7.

Листинг 5.7. Код отображения родительских и дочерних данных из связанных таблиц

Private Sub btnChildRows_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnChildRows.Click

 Dim rel As DataRelation CreateDataSet

 AddData

 ' Создание отношения между таблицами Departments и Employees

 rel = dsEmployeeInfо.Relations.Add("relDepartmentEmployees", _

dsEmployeeInfo.Tables("Departments").Columns("ID"), _

dsEmployeeInfo.Tables("Employees").Columns("DepartmentID"))

 DisplayChildRows(dsEmployeeInfo.Tables("Departments"))

End Sub

Private Sub DisplayChidRows(ByVal dt As DataTable)

 Dim rel As DataRelation

 Dim relatedRows As DataRow

 Dim row As DataRow

 Dim col As DataColumn

 Dim i As Integer

 Dim rowData As String

 Me.lstOutput.Items.Add("")

 Me.lstOutput.Items.Add("CHILD ROWS")

 For Each row In dt.Rows

For Each rel In dt.ChildRelations

Me.lstOutput.Items.Add(_

dt.TableName & ": " & _

rel.ParentColumns(0).ColumnName & _

"= " & row(rel.ParentColumns(0).ToString))

relatedRows = row.GetChildRows(rel)

' Вывод значений записей.

For i = 0 To relatedRows.GetUpperBound(0)

rowData = "****" & _

rel.ChildTable.TableName & ":"

For Each col In rel.ChildTable.Columns

rowData = rowData & " " & _

relatedRows(i)(col.ToString)

Next col

Me.lstOutput.Items.Add(rowData)

Next i

Next rel

 Next row

End Sub

Подпрограмма btnChildRows_Click для обработки щелчков на кнопке Child Rows сначала создает объект DataSet и объекты DataTable с помощью подпрограммы CreateDataSet (код которой приведен в листинге 5.1), а затем наполняет их данными с помощью подпрограммы AddData (код которой приведен в листинге 5.2). После этого между таблицами Employees и Departments создается отношение с помощью кода, который приведен в листинге 5.6. Наконец, для вывода данных из записей в текстовом поле формы вызывается подпрограмма DisplayChildRows, которой в качестве аргумента (родительской таблицы) передается таблица Departments.

Поделиться:
Популярные книги

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Имперский Курьер. Том 5

Бо Вова
5. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 5

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Законы Рода. Том 11

Андрей Мельник
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 11

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

История "не"мощной графини

Зимина Юлия
1. Истории неунывающих попаданок
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
История немощной графини

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Призыватель нулевого ранга

Дубов Дмитрий
1. Эпоха Гардара
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга