Инкрементный поиск в Grid (да и не только)
Посмотрев на бурные обсуждения проблемы быстрого поиска в Grid, я вспомнил, что сам когда-то делал нечто похожее в своем приложении. Это не класс, не объект (просто лень тратить время на оформление). А сама процедура проста до безобразия:
Метод KeyPress формы, в которой расположен Grid(List):
LPARAMETERS nKeyCode, nShiftAltCtrl
cValidString="abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя1234567890 '"+'!@#$%^&*()_+№;%:?*()/|,.[]{}-=-"'
if ATC(CHR(nKeyCode), cValidString)>0
This.SearchString=This.SearchString+CHR(nKeyCode) && Добавляем введенный символ в переменную
This.OLEControl1.Panels(2).Text=' Быстрый поиск: "'+This.SearchString+'" ' && Обновление строки подсказки
=Seek(This.SearchString, "Abonenty", This.ColumnsArray(This.CurrentColumn)) && Поиск по текущей колонке
If Found()
This.Grid1.SetFocus
endIf
This.TimeOutTimer.Interval=3000 && Запуск таймера на очистку строки поиска через 3 секунды
NoDefault
endIf
Несмотря на топорность решения это работает быстро, не требует упорядочивания набора данных по колонке поиска (хотя для удобства поиска рекомендуется его делать) и привязано не к объекту, а к таблице. Таким же образом я делал поиск и в List'е, и в TreeView.