Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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() + "\n";

Затем вы переходите от таблицы 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, PetName и Color. как показано ниже.

// Переход от таблицы заказов к таблице ассортимента.

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. Навигация по связанным данным