Я работаю в C # с текстовым полем, которое действует как ввод для поиска записи базы данных (Access SQL) по номеру идентификатора. Я хочу использовать автозаполнение в текстовом поле, но с некоторыми ограничениями.
Большая проблема заключается в том, что количество идентификаторов в системе составляет порядка тысяч, поэтому вместо того, чтобы заполнять поле Автозаполнение один раз всеми из них, мне нужно отслеживать, что находится в текстовом поле, и отображать предложения автозаполнения только при Есть ~ 50 или меньше вариантов.
В настоящее время я выполняю этот запрос для каждого KeyDown: SELECT count (*) FROM Table WHERE id LIKE 'textbox.text%'
Когда счетчик меньше 50, я заполняю автозаполнение результатами из версии SELECT id вышеприведенного оператора. Это привело меня к нескольким проблемам, большинство из которых, кажется, причуды C #, я не понимаю.
1) Когда я очищаю или добавляю в AutoCompleteCustomSet в одном событии KeyDown, фактически нажатая клавиша не добавляется в строку (т. Е. Обычное поведение ввода в текстовое поле не происходит).
2) Я попытался отделить обновление AutoCompleteCustomeSet от другого события (KeyPress или KeyUp), но это либо привело к сбою, либо отображение автозаполнения отображалось только на короткое время, прежде чем его скрыть.
Я чувствую, что эта проблема должна быть распространенной, и я просто иду по ней неправильно. Кто-нибудь может дать совет? Спасибо!
РЕДАКТИРОВАТЬ: это Windows Forms
РЕДАКТИРОВАТЬ 2: Выбор 50 лучших не решает проблему, что по мере того, как пользователь вводит (и, возможно, backspace и повторно вводит), 50 лучших изменится.