Я пытаюсь сделать так, чтобы, когда пользователь начал печатать в столбце «Предметы», поле автоматически заполняло / предлагать / append , а также позволяло выпадающий список всех элементов в столбец базы данных.
Пока что мне удалось предоставить функцию автозаполнения ИЛИ раскрывающийся список. Кажется, я не могу заставить их обоих работать вместе
Здесь важно то, что вы хотите, чтобы у пользователя была возможность добавить . Для этого раскрывающийся элемент управления должен , а не быть раскрывающимся списком , поскольку это не позволит пользователям вводить то, чего еще нет в списке. Я предлагаю вам изменить его на обычный выпадающий элемент управления.
Типичный поток таков:
отобразить раскрывающийся элемент управления после первого нажатия клавиши и начать заполнять раскрывающийся список значениями (независимо от того, поступает ли это из БД случайно), отфильтрованными по тому, что набрал пользователь. Если совпадений нет, то это начало новой записи, поэтому введенный символ становится новой записью в списке
По мере того, как вводится все больше и больше символов, продолжайте фильтровать ИЛИ добавляйте символы к новой записи (с # 1)
Когда они нажимают , введите / фокус, выберите соответствующую отфильтрованную запись ИЛИ, если это была новая запись, сохраните соответствующим образом (в данном случае в БД)
Вы можете очень легко увидеть этот тип шаблона в Visual Studio с открытым файлом C # и наблюдением, как аспект автозаполнения Intellisense работает с ключевым словом dynamic
в C #. Обычно вид автозаполнения C # не позволяет автоматически завершать вызов метода, если этот метод не распознается.
dynamic
автозаполнение действует иначе, так как не делает никаких предположений и по умолчанию не предлагает потенциальных участников. Тем не менее, он имеет концепцию добавления .
dynamic something = // get a reference to some object
something.Foo (); // Intellisense won't offer the Foo() suggestion.
// It won't result as a compile error either
Однако, если мы попытаемся снова вызвать тот же метод в той же области действия того же , то Intellisense входит и показывает нам, что метод, который мы вызывали до Foo()
(по крайней мере, во время кодирования), доступен. Конечно, мы не будем знать наверняка до времени выполнения.
something.Foo(); // Foo() NOT available in auto-complete
something.Foo(); // Foo() now available in auto-complete