Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 602
Эндрю Троелсен
private void btnGetInfo_Click(object sender, System.EventArgs e) {
string strInfo = "";
DataRow drCust = null;
DataRow[] drsOrder = null;
// Получение указанного CustID из TextBox.
int theCust = int.Parse(this.txtCustID.Text);
// Получение для CustID соответствующей строки таблицы Customers.
drCust = carsDS.Tables["Customers"].Row[theCust];
strInfo += "Заказчик №" + drCust["CustID"].ToString() + "\n";
// Переход от таблицы заказчиков к таблице заказов.
drsOrder = drCust.GetChildRows(carsDS.Relations["CustomerOrder"]);
// Получение номера заказа.
foreach (DataRow r in drsOrder) strInfo += "Номер заказа: " + r["OrderID"] + "\n";
// Переход от таблицы заказов к таблице ассортимента.
DataRow[] drsInv = drsOrder[0].GetParentRows(carsDS.Relatios["InventoryOrder"]);
// Получение информации о машине.
foreach (DataRow r in drsInv) {
strInfo += "Марка: " + r["Make"] + "\n";
strInfo += "Цвет: " + r["Color"] + "\n";
strInfo += "Название: " + r["PetName"] + "\n";
}
MessageBox.Show(stxInfo, "Информация для данного заказчика");
}
Как видите, ключом к решению задачи перемещения между таблицами данных оказывается использование ряда методов, определённых типом DataRow. Давайте разберем этот программный код но порядку. Сначала вы получаете подходящий идентификационный номер заказчика из текстового блока и используете этот номер для того, чтобы найти соответствующую строку в таблице Customers (конечно же, с помощью свойства Rows), как показано ниже.
// Получение указанного CustID из TextBox.
int theCust = int.Parse(this.txtCustID.Text);
// Получение для CustID соответствующей строки таблицы Customers.
DataRow drCust = null;
drCust = carsDS.Tables["Customers"].Raws[theCust];
strInfo += "3аказчик №" + drCust["CustID"].ToString()
Затем вы переходите от таблицы Customers к таблице Orders, используя отношение CustomerOrder. Обратите внимание на то, что метод DataRow.GetChildRows() позволяет получить доступ к строкам дочерней таблицы. После этого вы можете прочитать информацию из этой таблицы.
// Переход от таблицы заказчиков к таблице заказов.
DataRow[] drsOrder = null;
drsOrder = drCast.GetChildRows(carsDS.Relations["CustomerOrder"]);
// Получение номера заказа.
foreach(DataRow r in drsOrder) strInfo += "Номер заказа: " + r["OrderID"] + "\n";
Заключительным шагом является переход от таблицы Orders к родительской таблице (Inventory) с помощью метода GetParentRows(). После этого вы сможете прочитать информацию из таблицы Inventory для столбцов Make
// Переход от таблицы заказов к таблице ассортимента.
DataRow[] drsInv = drsOrder[0].GetParentRows(carsDS.Relations["InventoryOrder"]);
foreach(DataRow r in drsInv) {
strInfo += "Марка: " + r["Make"] + "\n";
strInfo += "Цвет: " + r["Color"] + "\n";
strInfo += "Название: " + r["PetName"] + "\n";
}
На рис. 22.21 показан один из возможных вариантов вывода.
Рис. 22.21. Навигация по связанным данным