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
Назад Оглавление Вперёд