Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 267

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 261 262 263 264 265 266 < 267 > 268 269 270 271 272 273 .. 320 >> Следующая

Объектно-ориентированную оболочку вокруг отношений между таблицами представляет класс System.Data .DataRelation. При создании объекта этого класса нам необходимо будет указать дружественное имя этого объекта, а также родительскую таблицу (например, Inventory) и подчиненную таблицу (Orders). Чтобы отношение было успешно установлено, в каждой из таблиц должен быть столбец с одинаковым названием (CarID) и типом данных (в нашем случае Int32), Полное определение функции Bui IdTableRel at і onShi р{) приведено ниже:
private void BuildTableRelationShipO {
II Создаем объект DataRelation
DataRelation dr - new DataRelatlonC'CustomerDrder":
II Родительская таблица
саrsDataSet.ТаЫ es["Customers"].Col umns["CustID"]):
II Подчиненная таблица
carsDataSet.Tables["Orders"].Columns["CustID"];
И Добавляем объект DataRelation в DataSet carsDataSet.Relations.Add(dr):
И Создаем еще один объект DataRelation
dr = new DataRelationC'InventoryOrder". II Родительская таблица
carsDataSet.Tables["Inventory"] .Colurnns["CarID"]); Il Подчиненная таблица
carsDataSet.Tablest"Orders"]. Columns["CarID"];
Моделируем отношения между таблицами при помощи класса DataRelation 661
// Добавляем и этот объект DataRelation в DataSet carsDataSet.Relations.Add(dr);
1
Объекты DataRelation хранятся в коллекции DataRelationCo'llection, поддерживаемой DataSet. В типе DataRelation предусмотрены свойства, которые позволяют получать ссылки на родительскую и подчиненную таблицу, участвующую в отношении, определять имя отношения и т. п. Наиболее часто используемые свойства представлены в табл. 13.11.
Таблица 13.11. Свойства типа DataRelation Свойство Описание
ChildColumns ChlldKeyConstraint Chi ІсШЬІе
DataSet
ParentColumns ParentKey Constraint ParentTable
Relation Name
Позволяют получить информацию о подчиненной таблице, участвующей в отношении, а также ссылку на саму эту таблицу
Позволяет получить ссылку на объект DataSet, к которому принадлежит данное отношение
Позволяют получить информацию о родительской таблице, участвующей в отношении, а также ссылку на саму эту таблицу
Позволяет получить или задать имя для данного отношения
Переход между таблицами, участвующими в отношении
Объект DataRelation позволяет осуществлять программным образом переход между двумя таблицами, участвующими в отношении. Проиллюстрируем это на примере. Пусть на главной форме нашего приложения появятся еще два элемента управления: кнопка и текстовое поле. В текстовое поле пользователь сможет вводить идентификатор заказчика, а при нажатии на кнопку будет выводиться информация о заказе, сделанном данным заказчиком. Вывод информации для простоты будет производиться через обычный MessageBox так, как показано на рис. 13.20.
Cust#l
; Order Number: t Make; BMW Colon Pea Soup Green Pet Name: Fred
:.:ж~л
Рис. 13.20. Переход междутаблицами с использованием объектов DataRelation
Код обработчика события i ck для нашей кнопки может быть таким (конечно, следовало бы реализовать проверку ошибок, но для простоты мы этим заниматься
не будем):
protected void btnGetlnfo_Click (object sender. System. EventArgs e) {
string strlnfo -DataRow drCust = null:
662 Глава 13 • Доступ к данным при помощи ADO.NET
DataRow[] drsOrder - null:
II Получаем CustlD из текстового поля
int theCust - 1 nt. Pa rset th1 s. txtCust ID. Text);
// Теперь, основываясь ка этом CustID, получаем всю строку из таблицы
// Customers
drCust - carsDataSet.Tables["Customers"].Rows[theCust]: strlnfo +- "Cust #" + drCust["CustID"].ToStringO + "\п":
II Теперь производим переход от таблицы Customers в таблицу Orders drsOrder - drCust. GetCb.11 dRows(carsDataSet. ReI ati ons [ "CustomerOrder"]):
// Получаем имя заказчика
foreachCDataRow г in drsOrder)
strlnfo f- "Order Number: " + r["OrderID"] + "\n":
Il Теперь переходим от таблицы Orders к таблице Inventory DataRaw[] drslnv -
drsOrder[0].GetParentRows(carsDataSet,Relations["InventoryOrder"]);
// об
foreachCDataRow r in drslnv) {
strlnfo +- "Make: " + r["Make"] + "\n": strlnfo +- "Color: " + r["Color"] + "\п": strlnfo +- "PetName: " + r["PetName"] + "\n";'
l4essageBox.Show(strlnfo. "Info based on cust ID"):
}
Как мы можем убедиться, перемещение между таблицами производится при помощи методов, определенных в типе DataRow. Проанализируем наш код шаг за шагом. Первое, что мы сделали — получили из текстового поля значение, означающее номер заказчика (Cust ID)1 в информации о котором заинтересован пользователь. Далее МЫ, используя полученное значение CustID, извлекли из таблицы Customers (при помощи свойства Rows) всю строку, в которой присутствует указанное значение CustID, целиком:
//Получаем CustID текстового поля
int theCust = int.ParseCthis.txtCustlD.Text);
// Теперь, основываясь на этом CustID. получаем всю строку из таблицы Customers drCust = carsDataSet.Tab1es[,,Customers-].Rows[theCust]: strlnfo += "Cust #" + drCust["CustID"].ToStringO + "\n":
Следующее наше действие — переход из таблицы Customers в таблицу Orders, для: чего используется отношение (объект DataRelation) CustomerOrder. Обратите внимание, что метод DataRow. Get.ChildRows() позволяет считывать строки из подчиненной таблицы. Получив эти строки, мы извлекаем из них нужную нам информацию:
Предыдущая << 1 .. 261 262 263 264 265 266 < 267 > 268 269 270 271 272 273 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100