|
Привязка 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. Значения, которые могут принимать ограничения.
Первичные и вторичные ключи помогают поддерживать целостность данных и во многом облегчают работу с ней.
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
Свойство RowFilter задаваемое строкой, применяется в качестве средства фильтрации на базе определенных критериев. Ее синтаксис подобен конструкции WHERE стандартного SQL, но относится к данным, уже полученным из базы. Примеры конструкции фильтрации показаны в таблице 12. Таблица 12. Примеры конструкции фильтрации.
![]() ![]() ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования... ![]() Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычислить, когда этот... ![]() Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все... ![]() ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|