powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Интерактивный поиск в комбобоксе
3 сообщений из 3, страница 1 из 1
Интерактивный поиск в комбобоксе
    #39702088
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

Спасибо большое
...
Рейтинг: 0 / 0
Интерактивный поиск в комбобоксе
    #39702105
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Спасибо большоеКакая-то мешанина... Да еще и с переводом фокуса после каждой клавиши..
...
Рейтинг: 0 / 0
Интерактивный поиск в комбобоксе
    #39702436
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 сделать можно.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Интерактивный поиск в комбобоксе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]