Помимо обычной фильтрации , основанной на свойствах 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.