Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 28 мар 2024, 13:43

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 02 авг 2019, 06:49 
Не в сети

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 241
Откуда: Украина, г. Днепропетровск
Hi All,

Delphi 10.2.3 или выше, EhLib 9.1.043

Есть FDQuery. У него установлены свойства:

Filter := 'FIELD1=10';
Filtered := False;

Этот FDQuery показываем в DBGridEh у которого для SearchPanel включен фильтрующий инкрементальный поиск.

Как только я в этом поиске набираю первый символ, то происходит фильтрация по этому символу, причем в этом фильтре учитывается и значение свойства Filter.
Но в данном случае это не правильно, ведь изначально свойство Filtered было False, следовательно фильтр у FDQuery был выключен и фильтрующий инкрементальный поиск не должен был его учитывать.

Более того, когда я в SearchPanel отменяю поиск (жму на "X"), то фильтр по свойству Filter все равно остается включенным, хотя изначально он был выключен.

В общем надо исправление этой ошибки.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 авг 2019, 18:57 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1546
Добрый день.

К сожалению простым исправлением эту проблему не решить.

SearchPanel при фильтрации использует событие DataSet.OnFilterRecord, которое активируется при
помощью свойства DataSet.Filtered, также, как и DataSet.Filter.
Чтобы заставить DataSet.OnFilterRecord работать, Грид должен присвоить свойство DataSet.Filtered.

В вашем случае, если фильтр в текущий момент не используется,
предлагаю значение Filter хранить в отдельной переменной.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 авг 2019, 06:06 
Не в сети

Зарегистрирован: 24 дек 2011, 14:04
Сообщений: 241
Откуда: Украина, г. Днепропетровск
EhLibSupport писал(а):
К сожалению простым исправлением эту проблему не решить.
Чтобы заставить DataSet.OnFilterRecord работать, Грид должен присвоить свойство DataSet.Filtered.
А если так попробовать:
В случае работы SearchPanel в режиме фильтра (фильтрующий поиск или инкрементальный фильтрующий поиск), перед началом самого поиска (когда набрали первую букву), смотрим значение Filtered и если он False, то сохраняем свойство Filter и очищаем его, а после отмены поиска возвращаем.

И кстати, провел этот же эксперимент (из первого сообщения) с MemTableEh - там такой проблемы нет: Значение свойства Filter не участвует в фильтрующем поиске, если на момент начала поиска свойство Filtered было False.

EhLibSupport писал(а):
В вашем случае, если фильтр в текущий момент не используется,
предлагаю значение Filter хранить в отдельной переменной.
Как крайний вариант можно и так (пока я так и сделал), но это не очень удобно

Опять же, даже если Filtered до фильтрующего поиска был False (свойство Filter не пустое), то после фильтрующего поиска Filtered почему то стает True.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB