Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Нужен универсальный компонент для инкрементного...


Автор: Etar 14.9.2009, 07:22
Приветствую.
Собственно мне нужен компонент, который может прицепляться к датасету либо гриду и осуществлять в нем поиск (и переход к) записи, значение определенной колонки которой начинается с того, что вводит пользователь в гриде (сам грид может быть readonly).

Т.е. например, пользователь встает в грид на некоторую колонку, начинает вводить текст, а компонент начинает искать запись по типу: WHERE <поле на котором стоит пользователь> LIKE '<текст, введенный пользователем>%'. Как только он находит первую удовлетворяющую условию запись, то тут же на нее переходит и дальше уже не ищет. Т.е. получается такой некоторый инкрементный поиск.
Хотелось еще бы, чтобы это сопровождалось еще и всплывающим окошком, в котором было бы видно, что вводит пользователь... Вот...
(не уверен, но вроде бы такое реализовано в гридах 1С Предприятия вроде...)

В принципе написать конечно такое не сложно, но я думаю, что уже есть такой компонент, тогда бы можно было уже не велосипедить и сэкономить время...

Спасибо

Автор: former 14.9.2009, 08:22
Etar, смысла в таком компоненте нет, ибо задача реализуется быстро и просто.
Какая СУБД и компоненты доступа?

Автор: Romikgy 14.9.2009, 09:51
Цитата(former @  14.9.2009,  07:22 Найти цитируемый пост)
смысла в таком компоненте нет

имхо есть 

Автор: Akella 14.9.2009, 09:58
Такое реализовано в TcxGrid. Но быть может можно написать свой класс, а не компонент... но дял работы не с гридом, а с TDataSet smile

Автор: Frees 14.9.2009, 10:21
такое есть и в TDBGridEh(EhLib) но только это не поиск а фильтрация

Автор: former 14.9.2009, 12:37
Цитата(Frees @  14.9.2009,  10:21 Найти цитируемый пост)
но только это не поиск а фильтрация 

Так почему бы не кинуть на форму Edit, Timer и изменять значение фильтра с необходимыми условиями поиска с задержкой от ввода? Это можно сделать как для грида, так и для DataSet.

Автор: Frees 14.9.2009, 13:51
Цитата(former @  14.9.2009,  15:37 Найти цитируемый пост)
Так почему бы не кинуть на форму Edit, Timer

вот автор и хочет, нечто такое только в виде готового компонента

имхо лучше самому написать, в принципе не сложно, зато под себя заточено...
 

Автор: former 14.9.2009, 20:43
Цитата(Frees @  14.9.2009,  13:51 Найти цитируемый пост)
вот автор и хочет, нечто такое только в виде готового компонента

Шило на мыло. Но, это как кому нравится. Параметры те же устанавливать придется.

Автор: Frees 14.9.2009, 21:15
CleverFilter

http://www.torry.net/quicksearchd.php?String=filter&Title=Yes

Автор: Akella 14.9.2009, 22:23
Цитата(former @  14.9.2009,  12:37 Найти цитируемый пост)
Так почему бы не кинуть на форму Edit, Timer 

таймер-то зачем smile , есть же события smile

Добавлено через 1 минуту и 46 секунд
Цитата(Frees @  14.9.2009,  21:15 Найти цитируемый пост)
CleverFilter

Это компоненты, позволяющие строить достаточно сложные фильтры, но никак не связаны с контекстным поиском.

Тем более, есть же официальный сайт smile
http://www.devrace.com/ru/cleverfilter/

Автор: former 14.9.2009, 22:42
Цитата(Akella @  14.9.2009,  22:23 Найти цитируемый пост)
таймер-то зачем smile , есть же события smile

Что бы выполнять поиск с задержкой в процессе редактирования строки поиска. А то фильтрация будет непрерывной.

Автор: former 14.9.2009, 23:02
удалил smile 

Автор: Akella 15.9.2009, 08:50
Цитата(former @  14.9.2009,  22:42 Найти цитируемый пост)
Что бы выполнять поиск с задержкой 


Цитата(former @  14.9.2009,  22:42 Найти цитируемый пост)
А то фильтрация будет непрерывной. 


Ты о чем, о поиске или о фильтрации?

Добавлено через 1 минуту и 29 секунд
А зачем поиск с задержкой, наоборот - контекстный поиск должен быть достаточно быстрым. Если пользователь начнёт быстро набирать текст, а искать программа будет с задержкой, то это будет раздражать пользователя.

Автор: former 15.9.2009, 09:55
Цитата(Akella @  15.9.2009,  08:50 Найти цитируемый пост)
Ты о чем, о поиске или о фильтрации?

Возможно, что не стоит смешивать эти два понятия, но на мой взгляд поиск - это частный случай фильтрации. Фильтр дает гораздо большие возможности в поиске записи(ей), удовлетворяющих условиям.
Цитата(Akella @  15.9.2009,  08:50 Найти цитируемый пост)
А зачем поиск с задержкой, наоборот - контекстный поиск должен быть достаточно быстрым. Если пользователь начнёт быстро набирать текст, а искать программа будет с задержкой, то это будет раздражать пользователя. 

Вот смотри. Если у тебя большой объем данных и ты начинаешь набирать строку для поиска, ошибаешься, стираешь, продолжаешь набор. Все это время будет выполняться фильтрация/поиск. А если у тебя есть задержка 1000 - 1500 мс, то фильтрация/поиск будет выполнена только после окончания ввод (когда пользователь перестанет долбить клавиатуру).
Разумеется ты начнешь сейчас говорить, что это все выполняется локально, но тем не менее.
Посмотри примеры FIB-ов. Там как раз нечто похожее, правда с некоторыми извратами, реализовано.

Автор: Akella 15.9.2009, 13:16
Да, часто путают поиск и фильтрацию. Но на языке программистов есть
TTable.Locate и похожие методы, а есть TTable.Filter.
Взять, например cxGrid, там есть контекстный поиск, а есть фильтрация. Взять, например, DBGridEh - там есть встроенная форма поиска (Сtrl+F), а есть фильтрация.
Понятно, что в языке SQL нет разделения на поиск и фильтрацию относительно операторов языка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)