Читаем Язык программирования С# 2005 и платформа .NET 2.0. полностью

Для демонстрации возможностей использования объектов DataRelation создайте новый проект Windows Forms с именем MultitabledDataSet. Графический интерфейс пользователя этого приложения достаточно прост. На рис. 22.20 вы можете видеть три элемента управления DataGridView, содержащие данные из таблиц Inventory, Orders и Customers базы данных Cars. Кроме того, там присутствует одна кнопка, с помощью которой информация обо всех изменениях направляется в хранилище данных.

Рис. 22.20. Просмотр связанных объектов DataTable

Чтобы упростить ситуацию, тип MainForm будет использовать построители команд (по одному для каждой таблицы) для автоматического генерирования SQL-команд каждого из трех объектов SqlDataAdapter. Вот исходная модификация соответствующего экземпляра типа Form:

public partial class MainForm: Form {

 // Объект DataSet для формы.

 private DataSet carsDS = new DataSet("CarsDataSet");

 // Применение построителей команд для упрощения

 // настройки адаптеров данных.

 private SqlCommandBuilder sqlCBInventory;

 private SqlCommandBuilder sqlCBCustomers;

 private SqlCommandBuilder sqlCBOrders;

 // Адаптеры данных (для каждой из таблиц).

 private SqlDataAdapter intTableAdapter;

 private SqlDataAdapter custTableAdapter;

 private SqlDataAdapter ordersTableAdapter;

 // Объект соединения для формы.

 private SqlConnection cn = new SqlConnection("server= (local);uid=sa;pwd=;database=Cars");

 …

}

Конструктор формы выполняет основную работу по созданию членов-переменных для данных и заполнению DataSet. Обратите также внимание на вызов приватной вспомогательной функции ВuildTableRelationship().

public MainForm() {

 InitializeComponent();

 // Создание адаптеров.

 invTableAdapter = new SqlDataAdapter("Select * from Inventory", cn);

 custTableAdapter = new SqlDataAdapter("Select * from Customers", cn);

 ordersTableAdapter = new SqlDataAdapter("Select * from Orders", cn);

 // Автогенерирование команд.

 sqlCBInventory = new SqlCommandBuilder(invTableAdapter);

 sqlCBOrders = new SqlCommandBuilder(ordersTableAdapter);

 sqlCBCustomers = new SqlCommandBuilder(custTableAdapter);

 // Добавление таблиц в DataSet.

 invTableAdapter.Fill(carsDS, " Inventory");

 custTableAdapter.Fill(carsDS, "Customers");

 ordersTableAdapter.Fill(carsDS, "Orders");

 // Создание отношений между таблицами.

 BuildTableRalationship();

 // Привязка к элементам управления.

 dataGridViewInventory.DataSource = carsDS.Tables["Inventory"];

 dataGridViewCustomers.DataSourсе = carsDS.Tables["Customers"];

 dataGridViewOrders.DataSource = carsDS.Tables["Orders"];

}

Вспомогательная функция 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.

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT