Фильтрация
Помимо обычной фильтрации, основанной на свойствах Filter, Filtered и методе-обработчике onFilterRecord, класс TCustomADODataSet предоставляет разработчику дополнительные возможности.
Свойство:
TFilterGroup = (fgUnassigned, fgNone, fgPendingRecords, fgAffectedRecords, fgFetchedRecords, fgPredicate, fgConflictingRecords); property FilterGroup: TFilterGroup;
…задает групповой фильтр для записей, основываясь на информации о состоянии каждой записи набора данных, подобно рассмотренному выше свойству RecordStatus.
Фильтрация возможна по следующим параметрам:
- fgUnassigned – фильтр не задан;
- fgNone – все ограничения, заданные фильтром, снимаются, отображаются все записи набора данных;
- fgPendingRecords – отображаются измененные записи, несохраненные в хранилище данных при вызове метода updateBatch или cancelBatch;
- fgAffectedRecords – показываются записи, обработанные при последнем сохранении в хранилище данных;
- fgFetchedRecords – имеем записи, полученные при последнем обновлении из источника данных;
- fgPredicate – видны только удаленные записи;
- fgConfiictingRecords – отображаются модифицированные записи, при сохранении которых в хранилище данных возникла ошибка.
Для того чтобы групповая фильтрация заработала, необходимы два дополнительных условия. Во-первых, фильтрация должна быть включена – свойство Filtered должно иметь Значение True.
Во-вторых, свойство LockType должно иметь значение ItBatchOptimistic.
with ADODataSet do begin Close; LockType: = ItbatchOptimistic; Filtered: = True; FilterGroup: = fgFetchedRecords; Open; end;
Метод:
procedure FilterOnBookmarks(Bookmarks: array of const);
…включает фильтрацию по существующим закладкам. Для этого предварительно необходимо при помощи метода GetBookmark установить закладки на интересующих записях. При вызове метода FilterOnBookmarks автоматически очищается свойство Filter, а свойству FilterGroup присваивается значение gUnassigned.