2007 г.
Марченко Антон Леонардович
Интернет-Университет Информационных Технологий, INTUIT.ru
Назад Оглавление Вперёд
Изменение данных в DataTable и состояние строки таблицы
Основной контроль за изменениями данных в таблице возлагается на строки – объекты класса DataRow
.
Для строки определены несколько состояний, которые объявлены в перечислении RowState
. Контроль за сохраняемой в строках таблицы информацией обеспечивается посредством определения состояния строки, которое обеспечивается одноименным (RowState
) свойством – членом класса DataRow
.
Состояние | Описание |
---|
Unchanged | Строка не изменялась со времени загрузки при помощи метода Fill() либо с момента вызова метода AcceptChanges() |
Added | Строка была добавлена в таблицу, но метод AcceptChanges() еще не вызывался |
Deleted | Строка была удалена из таблицы, но метод AcceptChanges() еще не вызывался |
Modified | Некоторые из полей строки были изменены, но метод AcceptChanges() еще не вызывался |
Detached | Строка НЕ ЯВЛЯЕТСЯ ЭЛЕМЕНТОМ КОЛЛЕКЦИИ DataRows . Ее создали от имени таблицы, но не подключили |
Пример. Создание таблицы, работа с записями
Листинг 3: html, txt
Relations
В классе DataSet
определяется свойство Relations
– набор объектов – представителей класса DataRelations
. Каждый такой объект определяет связи между составляющими объект DataSet
объектами DataTable
(таблицами). Если в DataSet
более одного набора DataTable
, набор DataRelations
будет содержать несколько объектов типа DataRelation
. Каждый объект определяет связи между таблицами – DataTable
. Таким образом, в объекте DataSet
реализуется полный набор элементов для управления данными, включая сами таблицы, ограничения и отношения между таблицами.
Constraints
Объекты – представители класса Constraint
в наборе Constraints
объекта DataTable
позволяет задать на множестве объектов DataTable
различные ограничения. Например, можно создать объект Constraint
, гарантирующий, что значение поля или нескольких полей будут уникальны в пределах DataTable
.
DataView
Объекты – представители класса DataView
НЕ ПРЕДНАЗНАЧЕНЫ для организации визуализации объектов DataTable
.
Их назначение – простой последовательный доступ к строкам таблицы. Объекты DataView
являются средством перебора записей таблицы. При обращении ЧЕРЕЗ объект DataView
к таблице получают данные, которые хранятся в этой таблице.
DataView нельзя рассматривать как таблицу. DataView
не может обеспечить представление таблиц. Также DataView
не может обеспечить исключения и добавления столбцов. Таким образом, DataView
НЕ является средством преобразования исходной информации, зафиксированной в таблице.
После создания объекта DataView
и его настройки на конкретную таблицу появляется возможность перебора записей, их фильтрации, поиска и сортировки.
DataView
предоставляет средства динамического представления набора данных, к которому можно применить различные вырианты сортировки и фильтрации на основе критериев, обеспечиваемых базой данных.
Класс DataView
обладает большим набором свойств, методов и событий, что позволяет с помощью объекта – представителя класса DataView
создавать различные представления данных, содержащихся в DataTable
.
Используя этот объект, можно представлять содержащиеся в таблице данные в соответствии с тем или иным порядком сортировки, а также организовать различные варианты фильтрации данных.
DataView
предоставляет динамический взгляд на содержимое таблицы в зависимости от установленного в таблице порядка представления и вносимых в таблицы изменений.
Функционально реализация DataView
отличается от метода Select
, определенного в DataTable
, который возвращает массив DataRow
(строк).
Для управления установками представления для всех таблиц, входящих в DataSet
, используется объект – представитель класса DataViewManager
.
DataViewManager
предоставляет удобный способ управления параметрами настройки представления по умолчанию для каждой таблицы.
Примеры использования DataView
Для организации просмотра информации, сохраняемой объектом-представителем класса DataTable
через объект – представитель класса DataView
, этот объект необходимо связать с таблицей.
Таким образом, в приложении создается (независимый!) вьюер, который связывается с таблицей.
Итак, имеем
DataTable tbl = new DataTable("XXX"); // Объявлен и определен объект "таблица".
DataView vie; // Ссылка на вьюер.
vie = new DataView(); // Создали...
vie.Table = tbl; // Привязали таблицу к вьюеру.
// Можно и так...
vie = new DataView(tbl); // Создали и сразу привязали...
Управление вьюером также осуществляется посредством различных достаточно простых манипуляций, включая изменение свойств объекта. Например, сортировка включается следующим образом:
// Предполагается наличие кнопочных переключателей,
// в зависимости от состояния которых в свойстве Sort
// вьюера выставляется в качестве значения имя того или
// иного столбца. Результат сортировки становится виден
// непосредственно после передачи информации объекту,
// отвечающему за демонстрацию таблицы (rpDataGreed).
if (rBN.Checked) rd.view.Sort = "nRoll";
if (rBX.Checked) rd.view.Sort = "X";
if (rBY.Checked) rd.view.Sort = "Y";
this.rpDataGrid.DataSource = rd.view;
Следующий пример кода демонстрирует возможности поиска, реализуемые объектом – представителем класса DataView
. Сортировка обеспечивается вариантами методов Find
и FindRows
, которые способны в различной реализации воспринимать отдельные значения или массивы значений.
Поиск информации проводится по столбцам, предварительно перечисленным в свойстве Sort
. При неудовлетворительном результате поиска метод Find
возвращает отрицательное значение, метод FindRows
– нулевое.
В случае успеха метода Sort
возвращается индекс первой найденной записи. По этому индексу можно получить непосредственный доступ к записи:
Листинг 4: html, txt
Применение метода FindRows
. В случае успешного завершения поиска возвращается массив записей, элементы которого могут быть выбраны посредством цикла foreach
:
Листинг 5: html, txt
В примере демонстрируется взаимодействие автономной таблицы и "заточенного" под нее вьюера. Записи в таблицу можно добавлять как непосредственно, так и через вьюер. При этом необходимо совершать некоторое количество дополнительных действий. Через вьюер же организуется поиск записей.
Листинг 6: html, txt
Назад Оглавление Вперёд