Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_6_Tekhnologia_programmirovania.docx
Скачиваний:
46
Добавлен:
20.03.2016
Размер:
91.4 Кб
Скачать

2.6. Класс DataRelation

После того как в DataSet появилось несколько объектов таблиц, можно определить отношения между этими таблицами. Объектно-ориентированную оболочку вокруг отношений между таблицами представляет класс DataRelation. При создании объекта этого класса необходимо указать имя отношений, а также родительскую и подчиненную таблицы. Чтобы отношение было успешно установлено, в каждой из таблиц должен быть столбец с одинаковым названием и типом данных.

Объекты DataRelation хранятся в коллекции DataRelationCollection, поддерживаемой DataSet. В типе DataRelation предусмотрены свойства, которые позволяют получать ссылки на родительскую и подчиненную таблицу, участвующую в отношении, определять имя отношения и т.п. Наиболее часто используемые свойства представлены в таблице:

Свойство

Описание

ChildColumns

ChildKeyConstraint

ChildTable

Позволяют получить информацию о подчиненной таблице, участвующей в отношении, а также ссылку на саму эту таблицу

DataSet

Позволяет получить ссылку на объект DataSet, к которому принадлежит данное отношение

ParentColumns

ParentKeyConstraint

ParentTable

Позволяют получить информацию о родительской таблице, участвующей в отношении, а также ссылку на саму эту таблицу

RelationName

Позволяет получить или задать имя для данного отношения

Перемещение между таблицами производится при помощи методов, определенных в классе DataRow. Так, метод GetChildRows() позволяет считывать строки из подчиненной таблицы, а метод GetParentRows() – из родительской таблицы.

3. Пример выполнения работы

Задание. Реализовать с помощью технологии ADO.NET программный интерфейс управления базой данных, созданной в предыдущей лабораторной работе. Предусмотреть возможность добавления, редактирования, удаления, фильтрации записей.

3.1. Визуальное проектирование диалогового окна

Внешний вид работающего приложения приведен на рисунке 8.3.

Настройки таблиц dataGridView1 и dataGridView1 приведены в описании предыдущей лабораторной работы.

Текстовые поля FamTextBox и NameTextBox используются для добавления новой записи или редактирования записи, выделенной в таблице. Для удобства редактирования при выделении строки в таблице данные об имени и фамилии человека копируются в соответствующие текстовые поля.

Текстовое

поле FamTextBox

Таблица dataGridView1

Текстовое

поле PhoneTextBox

Таблица dataGridView2

Текстовое

поле NameTextBox

Список FamComboBox

Кнопка AddContactButton

Кнопка

EditButton

Кнопка

DelContactButton

Флажок

FilterCheckBox

Кнопка

AddPhoneButton

Кнопка

EditPhoneButton

Кнопка

DelPhoneButton

Рис. 8.3. Главная форма приложения

3.2. Проектирование программного кода

3.2.1. Обновление содержимого главного окна приложения

Обновлять содержимое главного окна необходимо, когда пользователь производит какие-либо изменения с записями базы данных: добавление, редактирование, удаление записей таблиц, а также при открытии соединения с базой данных в начале работы программы.

Добавить в класс новый метод можно либо вручную, либо с использованием визуальных средств разработки. Для этого выбрать в меню View пункт Class View. В результате откроется окно, где можно просматривать список всех классов, описанных в пространстве имен приложения. Щелкнув правой кнопкой на класс главной формы, следует выбрать в контекстном меню пункт View Class Diagram. После этого в рабочей области откроется файл диаграммы классов, где можно создавать новые классы, интерфейсы, делегаты, перечисления и т.п., а также добавлять в существующие классы методы, поля, свойства, события и т.д.

Чтобы добавить в класс метод, нужно щелкнуть правой кнопкой в заголовке класса формы и выбрать в контекстном меню пункт Add->Method. После этого в окне Properties можно будет установить свойства для добавляемого метода: его имя, вид доступа, тип возврата и т.д.

Для обновления содержимого формы следует добавить в класс формы метод UpdateContacts(). Тип возврата метода – void, вид доступа – private, параметров нет. Программный код метода следующий:

private void UpdateContacts()

{

//обновить содержимое таблиц базы данных

phonesTableAdapter.Update(dataSet11);

oleDbDataAdapter1.Update(dataSet11);

//очистить DataSet

dataSet11.Clear();

//заполнить таблицы в объекте DataSet

oleDbDataAdapter1.Fill(dataSet11.Contacts);

phonesTableAdapter.Fill(dataSet11.Phones);

//очистить содерижмое списка фамилий

FamComboBox.Items.Clear();

//заполнить список фамилий значениями из таблицы

foreach (DataRow row in dataSet11.Contacts.Rows)

FamComboBox.Items.Add(row["Fam"]);

//в списке фамилий - ни одна фамилия не выделена

FamComboBox.Text = "";

}

Прежде всего, необходимо сохранить сделанные в программе изменения непосредственно в базу данных. Делается это с помощью метода Update(), применяемого к адаптерам таблиц. Далее содержимое объекта DataSet очищается (Clear()) и заполняется заново методом Fill().

Выпадающий список FamComboBox содержит список фамилий людей. При изменении содержимого базы данных его также нужно обновить. Сначала его строки методом Clear() очищаются, а затем заполняются заново фамилиями из обновленной таблицы (метод Add()). Цикл foreach используется для просмотра всех записей таблицы.

Так как обновление данных должно выполняться и при запуске программы, то содержимое обработчика события FormLoad изменится следующим образом:

private void Form1_Load(object sender, EventArgs e)

{

oleDbConnection1.Open(); //открыть соединение

UpdateContacts(); //обновить главное окно

}