V1s1ter

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Postscriptum Работает как часть WHERE запросв SELECT из SQL. Написав %ма% получиш мама, Ума, Турман... Добавлено: Чтобы фильтр заработал надо еще подключить соответствующий адабтер к используемой базе. В принципе все детально написано в документации Код: Engine DataSet FileName BDE TQuery EhLibBDE ADO TADOQuery EhLibADO ClientDataSet TClientDataSet EhLibCDS DBExpress TSQLQuery EhLibDBX InterBase TIBQuery EhLibIBX | Указанные файлы и еще ряд других в папке EhLib/DataService Код: Использование DBGridEh для сортировки и фильтрации данных в DataSet. DBGridEh не может сортировать или фильтровать данные самостоятельно. Но он может послать команду для сортировки или фильтрации специальному объекту, который сделает это в DataSet'е. Вы можете выбрать 2 типа сортировки (локальная и серверная) используя свойство SortLocal и два типа фильтрации (также локальная и серверная), но реальная возможность применения каждого типа операции зависит от типа DataSet'а. Например TBDEDataSet - не поддерживает локальную сортировку (внутри DataSet'а), так что вы не сможете сортировать данные локально, когда grid присоединен к TQuery или TTable. Библиотека имеет набор специальные объекты для сортировки/фильтрации стандартных типов DataSet'ов постовляемых вместе с Delphi. Ниже вы можете видеть таблицу специальных объектов и DataSet'ов в которых объекты могут сортировать или фильтровать данные. Unit DataSet Local sorting Server sorting Local filtering Server filtering EhLibBDE TQuery,TTable N Y Y Y EhLibADO TADOQuery,TADODataSet Y Y Y Y EhLibCDS TClientDataSet Y Y Y Y EhLibDBX TSQLQuery,TSQLDataSet N Y N Y EhLibIBX TIBQuery,TIBDataSet N Y Y Y Когда grid настроен для сортировки на Сервере, специальный объект строит SQL-выражение ORDER BY и заменяет строку ORDER BY в свойстве Command или SQL DataSet'а и переоткрывает его. Когда grid настроен для локальной сортировки специальный объект производит сортировку учитывая специфику конкретного типа DataSet'а. Когда grid настроен для Локальной фильтрации, специальный объект строит выражение и присваивает его свойству Filter DataSet'а. Перед этим нужно заранее выставить значение Filtered в True. Когда grid настроен для фильтрации на сервере, специальный объект строит выражение для предложения 'WHERE' SQL-строки DataSet'а. Он пытается найти строку, начинющуюся с ключевого выражения '/*Filter*/' (Вы можете изменять это ключевое выражение используя глобальную переменную SQLFilterMarker) в SQL-выражении и добавляет выражение для фильтрации после ключа в той же строке. Так что, SQL-запрос должен содержать строку, начинающуюся с '/*Filter*/' . Например: ' select * from table1 where /*Filter*/ 1=1 ' Для автоматической фильтрации/сортировки данных в dataset'е требуется добавить один из модулей EhLibXXX (EhLibADO, EhLibBDE, EhLibCDS ... в зависимости от dataset'а, подключенного к grid') в раздел 'uses' любого модуля вашего проекта. Эти EhLibXXX модули содержат код для регистрации класса который наследуется от TDatasetFeaturesEh (специальный объект) и осуществляет фильтрацию/сортировку в DataSet'е. Для DataSet'ов сторонних разработчиков можно написать и зарегестрировать свой собственный класс или написать обработчики событий OnApplyFilter и/или OnSortMarkingChanged для каждого требуемого grid'а. Кроме того можно написать OnApplyFilter и/или OnSortMarkingChanged для глобальной переменной DBGridEhDataService. Эти события имеют тип TNotifyEvent, где в качестве Sender'а выступает TCustomDBGridEh. Настройка сетки для сортировки данных: TDBGridEh позволяет отображать специальные sortmarking bitmaps (маленькие треугольники) в правой части заголовков столбцов. Для отображения sortmarking bitmaps добавьте dghAutoSortMarking в свойство OptionsEh. Добавьте также dghMultiSortMarking в OptionsEh для обеспечения одновременной пометки сортировки по нескольким столбцам. Установите Column.Title.TitleButton в True для заголовков, у которых вы хотите изменять sortmarkers в run-time. Вы можете установить свойство сетки ColumnDefValues.Title.TitleButton чтобы позволить метки сортировки для всех столбцов, у которых не менялось свойство Column.Title.TitleButton. В run-time клик на заголовке изменяет порядок сортировки. При нажатом Ctrl можно отметить насколько столбцов одновременно. После клика на заголовке, если событие OnSortMarkingChanged не пусто то оно вызывается, иначе дейсвие передается на выполнение специальному объекту, если тот зарегистрирован. Специальный объект использует свойство Grid.SortLocal для определения типа сортировки данных: локально либо на сервере. Если вы пишете обработчик события OnSortMarkingChanged вы можете использовать свойство TDBGrid.SortMarkedColumns для доступа к сортируемым столбцам и свойство TColumnEh.Title.SortMarker для получения состояния маркера сортировки. Настройка grid'а для фильтрации данных: TDBGridEh позволяет отображать специальную строку (под заголовком), где пользователь вводит в ячейки текст для фильтрации записей в dataset'е. (Значения в ячейке могут выглядеть как: "1", ">=1", ">1 AND <=5", "%TestStr%"). Установите STFilter.Visible в True для отображения специальной строки. Во run-time, когда курсор находится в ячейке фильтрации, пользователь может нажать ENTER для применения фильтра. Grid проанализирует выражения в каждой непустой ячейке фильтрации и вызовет метод TDBGridEh.ApplyFilter, далее вызывается событие OnApplyFilter либо осуществляется передача действия специальному объекту, если тот зарегистрирован. Текст выражения в ячейке фильтра должен иметь следующий формат: [Operator1] Operand1 [)] [AND|OR Operator2 Operand2 [)] ] Где OperatorX - один из [ = | <> | != | > | < | >= | <= | ~ | !~ | in ( ] OperandX - число, дата, строковое выражение, либо, для оператора 'IN', - список значений, разделенных запятыми. Например: '1' '>=1' '>1 AND <=5' '~ TestStr%' '!~ TestStr_' 'in (1,2,3,4,5,6) and >100' 'in (Str1,Str2,Str3)' | |