Навигационные возможности для связанных таблиц
Навигационные возможности для связанных таблиц
Чтобы продемонстрировать возможности DataRelation при программной реализации доступа к данным связанных таблиц, добавьте в форму новый тип Button и соответствующий ему TextBox. В результате конечный пользователь должен получить возможность ввести идентификационный номер заказчика и увидеть информацию о заказе соответствующего клиента, которая выводится в простом окне сообщения. Обработчик события Click этой кнопки реализован так.
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() + " ";
// Переход от таблицы заказчиков к таблице заказов.
drsOrder = drCust.GetChildRows(carsDS.Relations["CustomerOrder"]);
// Получение номера заказа.
foreach (DataRow r in drsOrder) strInfo += "Номер заказа: " + r["OrderID"] + " ";
// Переход от таблицы заказов к таблице ассортимента.
DataRow[] drsInv = drsOrder[0].GetParentRows(carsDS.Relatios["InventoryOrder"]);
// Получение информации о машине.
foreach (DataRow r in drsInv) {
strInfo += "Марка: " + r["Make"] + " ";
strInfo += "Цвет: " + r["Color"] + " ";
strInfo += "Название: " + r["PetName"] + " ";
}
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"] + " ";
Заключительным шагом является переход от таблицы Orders к родительской таблице (Inventory) с помощью метода GetParentRows(). После этого вы сможете прочитать информацию из таблицы Inventory для столбцов Make, PetName и Color. как показано ниже.
// Переход от таблицы заказов к таблице ассортимента.
DataRow[] drsInv = drsOrder[0].GetParentRows(carsDS.Relations["InventoryOrder"]);
foreach(DataRow r in drsInv) {
strInfo += "Марка: " + r["Make"] + " ";
strInfo += "Цвет: " + r["Color"] + " ";
strInfo += "Название: " + r["PetName"] + " ";
}
На рис. 22.21 показан один из возможных вариантов вывода.

Рис. 22.21. Навигация по связанным данным
Этот пример убеждает в пользе типа DataSet. Поскольку DataSet отсоединяется от соответствующего источника данных, вы можете работать с копией данных, размещенной в памяти, переходя от одной таблицы к другой и выполняя все необходимые модификации, удаления или вставки. По завершении этой работы вы можете направить свои изменения в хранилище данных для их обработки.
Исходный код. Проект MultitabledDataSetApp размещен в подкаталоге, соответствующем главе 22.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Реализация связанных списков в ядре Linux
Реализация связанных списков в ядре Linux В ядре Linux для прохождения по связанным спискам используется унифицированный подход. При прохождении связанного списка, если не важен порядок прохода, эту операцию не обязательно начинать с головного элемента, на самом деле вообще
12.1. Решение проблем, связанных с загрузкой Windows Vista
12.1. Решение проблем, связанных с загрузкой Windows Vista Специальные варианты загрузки Windows VistaЕсли вы столкнулись с ситуацией, когда Windows Vista не загружается, попробуйте использовать один из дополнительных вариантов загрузки. Чтобы войти в меню выбора дополнительных вариантов
Навигационные кнопки
Навигационные кнопки Над адресной строкой проживает кнопочная панель, на которой представлены все наиболее популярные инструменты для перемещения по страничкам.Эта панель, наряду с адресной строкой – наш главный «пульт управления». Все кнопки здесь полезны, все –
Объединение связанных таблиц в запросе
Объединение связанных таблиц в запросе Для выборки связанной информации из нескольких таблиц используется объединение (join). Чтобы создать объединение в запросе, необходимо определить первичные (primary) и внешние (foreign) ключи в таблицах, участвующих в объединении (эти
Несколько связанных технологий баз данных
Несколько связанных технологий баз данных При программировании баз данных в Office вы столкнетесь еще с целым рядом терминов, поэтому вам стоит ознакомиться с ними заранее. ODBC (Open DataBase Connectivity- Открытый интерфейс доступа к базам данных) - это старый стандарт программирования
Создание таблиц
Создание таблиц Команда TABLE создает табличный объект: вставляет пустую таблицу в рисунок, начиная с указанной точки, или в определенную область с использованием стиля таблицы, количества строк, столбцов и размеров, которые вы назначаете.После запуска команды TABLE
Определение контекстно-связанных объектов
Определение контекстно-связанных объектов Чтобы определить класс (SportsCarTS), автоматически поддерживающий потоковую безопасность, без добавления в него сложной логики синхронизации патока при реализации членов, следует взять объект, производный от ContextBoundObject, и применить
Роль элементов управления, связанных с контролем ввода
Роль элементов управления, связанных с контролем ввода Заключительной группой рассматриваемых здесь элементов управления Web-формы являются так называемые элементы контроля ввода. В отличие от остальных рассмотренных нами элементов управления Web-формы, элементы
1.15. Добавление кнопок на навигационные панели с помощью UIBsrButtonItem
1.15. Добавление кнопок на навигационные панели с помощью UIBsrButtonItem Постановка задачи Необходимо добавить кнопки на навигационную
7.4. Решение с помощью GCD задач, связанных с пользовательским интерфейсом
7.4. Решение с помощью GCD задач, связанных с пользовательским интерфейсом Постановка задачи Интерфейс программирования приложений GCD используется для параллельного программирования, и необходимо узнать, каков оптимальный способ его применения с другими API, связанными с
7.5. Синхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом
7.5. Синхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом Постановка задачи Необходимо выполнять синхронные задачи, в которых не участвует код, связанный с пользовательским
7.6. Асинхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом
7.6. Асинхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом Постановка задачи Необходимо иметь возможность решать задачи, не связанные с пользовательским интерфейсом, с помощью
Десять необычных рекламных плакатов, связанных с высокими технологиями Николай Маслухин
Десять необычных рекламных плакатов, связанных с высокими технологиями Николай Маслухин Опубликовано 31 мая 2013 Креативная, шокирующая и эпатажная реклама – инструмент, которым владеют далеко не все производители рекламы. Давайте посмотрим на