TcxGridTableView + FindPanel

Игорь_UUS
Дата: 18.09.2019 16:34:04
Добрый день.

Для работы с различными справочниками используется TcxGridTableView (не путать с TcxGridDBTableView), пользователи используют FindPanel, радует то что поиск можно сказать по всем полям.

Есть справочники, где записей в них исчисляется десятками тысяч. Когда происходит открытие таких справочников может растягиваться на 10 и более секунд... не шибко "красиво" стало в плане скорости открытия.

На данный момент, чтоб много не переделывать, можно открывать такие справочники не закачивая данные, далее пользователь вводит в FindPanel несколько интересующих символов, и тут вопрос: Как правильно отловить событие прекращения ввода символов в FindPanel, после которого происходит поиск?

Если такое событие есть, далее при обработки события "закачаю данные" в TcxGridTableView, которые будут удовлетворять данному поиску... далее чем больше букв вводит пользователь тем точнее поиск.

Есть у кого какие мысли на этот счёт, очень буду благодарен!

Заранее спасибо.
Игорь_UUS
Дата: 18.09.2019 16:35:40
Использую версию DevExpress: 18.2
Подключение к БД через FireDAC
ma1tus
Дата: 18.09.2019 19:22:33
Игорь_UUS
поиск можно сказать по всем полям
Игорь_UUS
"закачаю данные" в TcxGridTableView, которые будут удовлетворять данному поиску...

прямо так
where lower(field_1) like '%ы%' or lower(field_2) like '%ы%' or lower(field_3) like '%ы%' or ...
?
энди
Дата: 18.09.2019 20:06:47
Игорь_UUS,

Так себе решение как мне кажется, понятно что можно извращаться с таймером или OnIdle, но мне кажется само решение автоматически производить поиск при нажатиях клавиш не совсем адекватно в данном случае.
Сделайте в лоб, пользователь водит что хочет найти, нажал Enter и вы загрузили данные, привычное поведение стандартных контролов. У вас же все таки десктоп, а не веб, и пользователь будет ожидать обычного для программы поведения.
Ваш вариант это скорее поведение контролов в браузере.
ёёёёё
Дата: 18.09.2019 21:47:10
Игорь_UUS
...
...
На данный момент, чтоб много не переделывать, можно открывать такие справочники не закачивая данные, далее пользователь вводит в FindPanel несколько интересующих симв
олов, и тут вопрос: Как правильно отловить событие прекращения ввода символов в FindPanel, после которого происходит поиск?

Если такое событие есть, далее при обработки события "закачаю данные" в TcxGridTableView, которые будут удовлетворять данному поиску... далее чем больше букв вводит пользователь тем точнее поиск.

...

То есть, пока юзер не начал вводить - ничего не доступно?
А как ввел хотя бы "а", и затем пауза - сразу все записи, где есть "а"? А потом, по мере ввода, количество записей должно уменьшаться? Намного ли это лучше поведения по умолчанию?

Я делал так: сперва ничего нет. Пока юзер не введет запрос в спецпанели панели и не нажмет "хочу". Если он хочет "всё сразу" - то и фик с ним, сам запросил, вот сиди и жди, пока подгрузится. А если ввел "азбука пчеловодства" - то и получит только то, что хочет. И никаких пауз, просто ждем, пока не нажмет на "хочу".
ёёёёё
Дата: 18.09.2019 21:54:59
ma1tus
Игорь_UUS
поиск можно сказать по всем полям
Игорь_UUS
"закачаю данные" в TcxGridTableView, которые будут удовлетворять данному поиску...

прямо так
where lower(field_1) like '%ы%' or lower(field_2) like '%ы%' or lower(field_3) like '%ы%' or ...
?

В DevExpress, кстати, в GridMode не поддерживается FindPanel. Не желают такую дичь громоздить.

There is no way to apply this feature to Grid Mode because Find Panel heavily uses the inner TcxGrid filtering capabilities that do not work in Grid Mode.
ёёёёё
Дата: 18.09.2019 22:18:57
Игорь_UUS,

если вопрос "как отловить событие" все еще в силе см. OnChanged свойства вью.DataController.Filter

Только нафига тебе вообще FindPanel, если ты собираешься сразу отфильтрованные записи грузить. Разве что для подсветки совпадающих фрагментов.
Но никто ведь не мешает забацать собственную панель. И по завершению ввода перезаливать данные в твой DataController.
Вот тут пишут, как красиво подсвечивать найденные фрагменты: https://www.devexpress.com/Support/Center/Question/Details/K18311/how-to-highlight-found-words-in-cells