Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 601
Эндрю Троелсен
…
}
Конструктор формы выполняет основную работу по созданию членов-переменных для данных и заполнению 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.
dr = new DataRelation("InventoryOrder", carsDS.Tables["Inventory"].Columns["CarID"], carsDS.Tables["Orders"].Columns["CarID"]);
carsDS.Relations.Add(dr);
}
Теперь, когда объект DataSet заполнен и отсоединен от источника данных, вы можете работать со всеми таблицами локально. Можно вставлять, обновлять или удалять значения любого из трех DataGridView. Как только вы будете готовы отправить измененные данные обратно в хранилище данных для обработки, щелкните на кнопке обновления формы. Программный код соответствующего обработчика события Click должен быть вам понятен.
private void btnOpdate_Cliсk(object sender, EventArgs e) {
try {
invTableAdapter.Update(carsDS, "Inventory");
custTableAdapter.Update(carsDS, "Customers");
ordersTableAdapter.Update(carsDS, "Orders");
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
После щелчка на кнопке обновления вы обнаружите, что каждая из таблиц в базе данных Cars соответствующим образом изменена.
Навигационные возможности для связанных таблиц
Чтобы продемонстрировать возможности DataRelation при программной реализации доступа к данным связанных таблиц, добавьте в форму новый тип Button и соответствующий ему TextBox. В результате конечный пользователь должен получить возможность ввести идентификационный номер заказчика и увидеть информацию о заказе соответствующего клиента, которая выводится в простом окне сообщения. Обработчик события Click этой кнопки реализован так.