|
Интерактивный поиск в комбобоксе
|
|||
---|---|---|---|
#18+
Всем добрый день! Будьте добры пожалуйста, подскажите ответ на следующий вопрос. У меня есть комбобокс, и он завязан на таблице, я по данному комбобоксу (нажатием на него) ищу нужную запись. Таблица и записей очень много. Как можно сделать интерактивный поиск в нем. т.е. ввожу символ и сразу инерактивно отфильтровываются записи. Аналогично как я делаю в текстовом поле. Я поставил обработчик на interactivechange и как только начинаю набивать что-то у меня в гриде запись выбирается: SELECT narush2 Locate for Alltrim(ThisFormSet.Form1.Text1.Value) $ ALLTRIM(narush2.fio) if found() ThisFormSet.rec_zap1 = RECNO() GO ThisFormSet.rec_zap1 *ThisFormSet.Form1.grdLech_uch.column2.text1.backcolor = rgb(229,229,229) ThisFormSet.Form1.Gridmash.Column1.SetFocus ThisFormSet.Form1.Text1.SetFocus endif Спасибо большое ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 13:43 |
|
Интерактивный поиск в комбобоксе
|
|||
---|---|---|---|
#18+
dima_18Всем добрый день! Будьте добры пожалуйста, подскажите ответ на следующий вопрос. У меня есть комбобокс, и он завязан на таблице, я по данному комбобоксу (нажатием на него) ищу нужную запись. Таблица и записей очень много.Много записей и комбо - уже что-то в консерватории не так.Как можно сделать интерактивный поиск в нем.В общем-то, он уже там есть. Возможно, он не такой как тебе нужно, но есть.т.е. ввожу символ и сразу инерактивно отфильтровываются записи.Фильтрация и поиск - несколько разные операции. И где отфильтровываться? В комбо? А в коде ниже вроде уже грид?Аналогично как я делаю в текстовом поле.Мы НЕ ЗНАЕМ как ты это делаешь. Я поставил обработчик на interactivechange и как только начинаю набивать что-то у меня в гриде запись выбирается: SELECT narush2 Locate for Alltrim(ThisFormSet.Form1.Text1.Value) $ ALLTRIM(narush2.fio) if found() ThisFormSet.rec_zap1 = RECNO() GO ThisFormSet.rec_zap1 *ThisFormSet.Form1.grdLech_uch.column2.text1.backcolor = rgb(229,229,229) ThisFormSet.Form1.Gridmash.Column1.SetFocus ThisFormSet.Form1.Text1.SetFocus endif Спасибо большоеКакая-то мешанина... Да еще и с переводом фокуса после каждой клавиши.. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 14:10 |
|
Интерактивный поиск в комбобоксе
|
|||
---|---|---|---|
#18+
dima_18, Вы не корректно используете термины, чем вводите и себя и других в заблуждение В терминах FoxPro Фильтр - отобразить (выбрать) только те записи, которые удовлетворяют критериям фильтрации Поиск - переместить указатель записи к первой попавшейся записи, удовлетворяющей критериям поиска Если Вы хотите чтобы при поиске также и фильтровались записи, то это надо оговаривать отдельно, поскольку в FoxPro при поиске количество отображаемых записей не меняется Существующий механизма работы ListBox (то, что отображается как раскрывающийся список ComboBox) предусматривает поиск по первым символам. Т.е. пользователь вводит первые символы, а в ListBox указатель автоматически переходит на первую запись, у которой первые символы равны тому значению, которое ввел пользователь. Поскольку при этом, как правило, список упорядочен по возрастанию, то все значения списка, начинающиеся на эти символы оказываются рядом и пользователю не сложно найти нужное То, что Вы написали в коде - это поиск по фрагменту строки. И этот фрагмент может быть в любом месте строки. Функционалом FoxPro такое не предусмотрено. Вам придется делать собственную форму поиска. Кроме того, то, что Вы написали в коде для пользователя имеет смысл в одном единственном случае, если введенный им фрагмент для поиска - уникален. Если же такие фрагменты встречаются несколько раз, то подобный механизм не упростит, а усложнит поиск нужной записи Для пример, представьте, что у Вас есть такие записи "123_А_456" "123_Б_456" "123_В_456" "123_Г_456" "123_Д_456" "123_Е_456" "123456_А_" Теперь пользователь вводит в качестве критерия поиска букву А. Команда Locate как и положено, находит первую запись "123_А_456" и переводит на нее указатель записи. Вроде, все хорошо? А как пользователь сможет найти последнюю запись"123456_А_"? А никак! Ведь отображены по прежнему ВСЕ записи, а последняя запись вне области видимости списка. Ну, и зачем нужен такой поиск? Для подобных задач используют фильтрацию записей. Т.е. необходимо не перейти к первой попавшейся записи, а отфильтровать (отобрать) только записи, удовлетворяющие условиям отбора. Стандартный объект ComboBox такого сделать не может. Для Grid сделать можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2018, 09:56 |
|
|
start [/forum/topic.php?fid=41&fpage=9&tid=1581747]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 129ms |
0 / 0 |