Вспомогательная функция BuildTableRelationship делает в точности то, что от нее ожидается. Напомним, что база данных Cars имеет ряд отношений "родитель-потомок", что учитывается в следующем фрагменте программного кода:
private void BuildTableRelationship {
// Создание объекта отношения CustomerOrder.
DataRelation dr = new DataRelation("CustomerOrder", carsDS.Tables["Customers"].Columns["CustID"], carsDS.Tables["Orders"].Columns["CustID"]);
carsDS.Relations.Add(dr);
// Создание объекта отношения InventoryOrder.
dr = new DataRelation("InventoryOrder", carsDS.Tables["Inventory"].Columns["CarID"], carsDS.Tables["Orders"].Columns["CarID"]);
carsDS.Relations.Add(dr);
}
Теперь, когда объект DataSet заполнен и отсоединен от источника данных, вы можете работать со всеми таблицами локально. Можно вставлять, обновлять или удалять значения любого из трех DataGridView. Как только вы будете готовы отправить измененные данные обратно в хранилище данных для обработки, щелкните на кнопке обновления формы. Программный код соответствующего обработчика события Click должен быть вам понятен.
После щелчка на кнопке обновления вы обнаружите, что каждая из таблиц в базе данных Cars соответствующим образом изменена.
Навигационные возможности для связанных таблиц
Чтобы
продемонстрировать возможности DataRelation при программной реализации доступа к данным связанных таблиц, добавьте в форму новый тип Button и соответствующий ему TextBox. В результате конечный пользователь должен получить возможность ввести идентификационный номер заказчика и увидеть информацию о заказе соответствующего клиента, которая выводится в простом окне сообщения. Обработчик события Click этой кнопки реализован так.
MessageBox.Show(stxInfo, "Информация для данного заказчика");
}
Как видите, ключом к решению задачи перемещения между таблицами данных оказывается использование ряда методов, определённых типом DataRow. Давайте разберем этот программный код но порядку. Сначала вы получаете подходящий идентификационный номер заказчика из текстового блока и используете этот номер для того, чтобы найти соответствующую строку в таблице Customers (конечно же, с помощью свойства Rows), как показано ниже.