Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Привязка 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 – правила обновления записей.

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

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

Значение Описание
Cascade если установлено свойство, то все записи дочерней таблицы будут удаляться или обновляться автоматически при удалении главной записи или при изменении ее ключа. Это свойство установлено по умолчанию.
SetNull позволяет заменить все значения вторичного ключа значением DBNull в случае, если соответствующая главная запись была удалена или изменила значение первичного ключа
SetDefault устанавливает значение вторичного ключа в дочерних записях в значение по умолчанию (DefaultValue)
None в этом случае никаких действий предпринято не будет, но будет выброшено исключение.

 

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

 

1.1.4 Представление (объект DataView).

Позволяет создавать подмножество данных из существующей таблицы в заданном порядке. Объект типа DataView не содержит данные, а лишь отображает их из существующего DataSet, формируется:

- на основе определенного в свойстве Filter условия;

- на основе сортировки отфильтрованного подмножества данных DataTable с помощью свойства Sort;

- как результат поиска.

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

DataTable dt = new DataTable();

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

DataView dv = dt.DefaultView;

dataGridView1 = dv;

dv.RowFilter = "name='vasya'";

 

1.2 Класс DataRelation (связи между таблицами)

DataRelation - специальный класс, который позволяет создавать объекты, обеспечивающие навигацию между двумя таблицами. Другими словами, если таблицы и связаны между собой (по двум полям, содержащим одинаковые значения):

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

навигация между двумя таблицами полностью отсутствует.

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

1) имя связи;

2) имя колонки в главной таблице;

3) имя колонки в дочерней таблице;

4) специальный флаг (показывает необходимость создания ограничений, т.е. в случае, если не был создан вторичный ключ и флаг установлен в true, то при добавлении объекта типа DataRelation этот ключ будет создан автоматически).

 

t.Relations.Add("имя_связи", table1.Columns[0], table2.Columns[1],false);

Есть возможность извлекать связанные записи с помощью методов GetChildRows() и GetParentRows().

foreach (DataRow r in table1.Rows[i].GetChildRows("имя_связи"))

{

textbox1.text += r[1].ToString();

}

 

2 Просмотр данных. Класс DataGridView.

Элементом управления, отображающим таблицу на форме, является DataGridView.

Элемент управления DataGridView читает схему данных из источника данных и на основе типа столбца автоматически выбирает тип элемента управления для отображения (поле ввода или выбора).

Также DataGridView имеет встроенную поддержку столбцов с изображениями, кнопками, комбинированными списками.

Существует одно средство старого компонента DataGrid, которое отличает его от DataGridView, а именно, определение отношений между таблицами в DataSet автоматически (см. рис 10). Знак (+) слева от каждой записи отображает тот факт, что DataSet имеет управляемое отношение между главной и подчиненной таблицами. Щелчок на имени отношения позволяет перейти к связанным записям. При этом в правом верхнем углу появятся пару пиктограмм, одна из которых позволяет перейти к родительской записи.

 

Рис. 10. Знак (+) слева от каждой записи обозначает отношения между главной и подчиненной таблицами.

2.1 Источники данных (DataSource).

Главным свойством элемента управления DataGridView является источник данных DataSource, которое указывает на любой из следующих источников:

· Массив (таблица может быть связана с одномерным массивом),

· DataTable,

· DataView,

· DataSet или DataViewManager,

· интерфейсы IList и IListSource,

· Любой обобщенный класс коллекции или объект, унаследованный от обобщенного класса коллекции.

2.1.1 Отображение данных из массива

 

Пример кода выглядит следующим образом:

string[] mas = new string[]{"one","two","three" };

dataGridView1.DataSource = mas;

 

При использовании в качестве DataSource массива можно столкнуться со следующей проблемой (см. рис.2.): вместо отображения строк, определенных в массиве, таблица показывает длины этих строк. Причина состоит в том, что DataGridView ищет первое общедоступное свойство объекта, содержащегося в массиве, а это и есть длина.

Рис.2. Проблема, связанная с примером кода.

2.1.2 Отображение данных из DataTable

DataTable можно отображать в элементе управления DataGridView двумя способами:

· Если используется DataTable сама по себе, следует просто установить свойство DataSource элемента управления на эту таблицу

· Если DataTable входит в DataSet, необходимо установить DataSource на DataSet, а свойство DataMember – равным имени DataTable внутри этого DataSet.

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

2.1.3 Отображение данных из DataView

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

Основные настройки DataView приведены в таблице 11

Таблица 11. Основные настройки DataView

Настройка Описание
AllowEdit = false отключает всю функциональность редактирования столбцов в строках
AllowNew = false отключает всю функциональность новых строк
AllowDelete = false отключает возможность удаления строк
RowStateFilter отображает только строки с заданным состоянием
RowFilter позволяет фильтровать строки на основе выражений

 

Свойство RowFilter задаваемое строкой, применяется в качестве средства фильтрации на базе определенных критериев. Ее синтаксис подобен конструкции WHERE стандартного SQL, но относится к данным, уже полученным из базы.

Примеры конструкции фильтрации показаны в таблице 12.

Таблица 12. Примеры конструкции фильтрации.









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.