Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MU_Prakticheskie_raboty_OPI.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
9.91 Mб
Скачать

Обработка событий

При изменении данных можно обрабатывать ряд специальных событий, которые возникают при модификации данных в таблице. Набор событий представлен в таблице 6.8

Таблица 6.8– Набор событий, возникающий при изменении данных.

Событие

Описание

ColumnChanged()

возникает, когда значение было успешно добавлено в колонку

ColumnChanging()

возникает при попытке установить значение в колонке

RowChanged()

возникает, когда значение в строке было изменено успешно

RowChanging()

инициируется при изменении DataRow

RowDeleted()

возникает, когда строка была успешно удалена

RowDeleting()

возникает, когда строка была помечена для удаления

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

Для упрощения дальнейшее работы приведем примеры кода, позволяющие привязать данные из таблицы к некоторым элементам управления.

Привязка DataTable к элементам управления: ListBox

DataTable dt = new DataTable();

// … добавляем колонки (student_id,

// … name) и данные

listBox1.DataSource = dt;

listBox1.DisplayMember = “name”;

listBox1.ValueMember = “student_id”;

// при этом листбокс заполнится

// значениями из колонки «name»

// код студента будет храниться в

// listBox1.Value

Привязка DataTable к элементам управления: ComboBox

DataTable dt = new DataTable();

// … добавляем колонки (student_id,

// … name) и данные

comboBox1.DataSource = dt;

comboBox1.DisplayMember = “name”;

comboBox1.ValueMember = “student_id”;

// при этом листбокс заполнится

// значениями из колонки «name»

// код студента будет храниться в

// comboBox1.Value

Использование DataGridView

DataTable dt = new DataTable();

// … наполнение данными

dataGridView1.DataSource = dt;

1.1.3 Ограничения (объект Constraints)

Колонки могут выступать в качестве ключей. Для этого их необходимо поместить в коллекцию Constraints.

d.Constraints.Add( new UniqueConstraint("myConstraint",dc));

Различают два типа Constraints:

  • UniqueConstraint – запрещение добавлять в таблицы дублирующиеся элементы (показывает, что столбец является основным ключом);

  • ForeignKeyConstraint – правила обновления дочерних строк при изменении родительской (показывает наличие вторичного ключа).

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

Задание первичного ключа в таблице выглядит следующим образом:

//главная таблица, хранящая пол м/ж

DataTable table1 = new DataTable();

table1.Columns.Add(new DataColumn("id", typeof(int)));

table1.Columns.Add(new DataColumn("name", typeof(string)));

table1.PrimaryKey = new DataColumn[] { table1.Columns[0] };

Существует другой способ создания первичного ключа. Для этого на колонку, которая должна являться первичным ключом, налагают требования на уникальность:

Constraint pkKey = table1.Constraints.Add("PR_Order", table1.Columns["id"],true);

Как и объект, определяющий первичный ключ, вторичный ключ (ForeignKeyConstraint) должен быть добавлен в коллекцию Constraints той таблицы, на колонку которой устанавливается вторичный ключ.

//таблица - справочник списка преподавателей

DataTable table2 = new DataTable();

table2.Columns.Add(new DataColumn("teacher_id", typeof(int)));

//пол преподавателя

table2.Columns.Add(new DataColumn("id", typeof(int)));

table2.Columns.Add(new DataColumn("teacher_name", typeof(string)));

table2.PrimaryKey = new DataColumn[] { table2.Columns[0] };

// внешний ключ

table2.Constraints.Add("имя_ограничения", table1.Columns[0], table2.Columns[1]);

Объект класса ForeignKeyConstraint имеет два важных свойства:

  • DeleteRule – правила удаления записей;

  • UpdateRule – правила обновления записей.

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

Таблица 6.9– Значения, которые могут принимать ограничения.

Значение

Описание

Cascade

если установлено свойство, то все записи дочерней таблицы будут удаляться или обновляться автоматически при удалении главной записи или при изменении ее ключа. Это свойство установлено по умолчанию.

SetNull

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

SetDefault

устанавливает значение вторичного ключа в дочерних записях в значение по умолчанию (DefaultValue)

None

в этом случае никаких действий предпринято не будет, но будет выброшено исключение.

Первичные и вторичные ключи помогают поддерживать целостность данных и во многом облегчают работу с ней.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]