специальные символы в автозаполнении c # - PullRequest
0 голосов
/ 24 января 2011

Я использую c # и базу данных в SQL Server. У меня есть поле автозаполнения, которое отлично работает с обычными символами. Я также хотел бы добавить функциональность автозаполнения специальных символов, таких как ö, Ä, é, è, ... Я также хотел бы добавить возможность идентифицировать символы, которые могут звучать одинаково в некоторых языках, например, «b» и «v», поэтому, если я наберу «boor», в качестве возможного предложения будет найдено «voor».

Есть идеи?

Спасибо

Редактировать: Текстовые поля автозаполнения используются для имен и фамилий (по одному для каждого). Они сделаны с AutoCompleteStringCollection. Они ищут в базе данных имена или фамилии, которые уже существуют. Эта часть приложения в основном дает пользователю возможность добавлять новых людей в приложение (имя, фамилия и т. Д.). Цель состоит в том, чтобы, когда пользователь создает нового пользователя в приложении, он / она получит список людей с именем или фамилией, с которой он / она печатает. Так что, если у нас уже есть «Джеймс Смит» в базе данных, когда пользователь печатает «Смит», он / она должен получить возможность сменить «Смит» (возможно, на автозаполнение), говоря «эй, вы имеете в виду« Смит »? " Поэтому мы избегаем, чтобы пользователь создавал одного и того же человека с неправильными именами.

Поскольку мы работаем с именами и фамилиями людей со всего мира, ошибки в создании нового человека могут исходить из любого языка.

PD:

  1. Было бы неплохо создать собственное автозаполнение? скрытие / отображение списка прямо под текстовым полем

  2. Для того, что я пытаюсь, функция SOUNDEX действительно хорошо работает для таких символов, как ö, Ä, é, è, ... Но я не могу вызвать базу данных для каждого отдельного имени или фамилии. Так что я не очень хорошо знаю, как его использовать.

Ответы [ 3 ]

1 голос
/ 24 января 2011

Я не уверен, что вы подразумеваете под автозаполнением.Что касается второй части вашего вопроса, вам, вероятно, нужна функция SQL Server SOUNDEX.Он возвращает четырехсимвольный код (SOUNDEX) для оценки сходства двух строк.

Используйте его следующим образом:

SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe');

Над словами пишутся почти одинаково, поэтому они имеют одинаковые soundex'ыS530 и S530.Я думаю, что soundex может использоваться с различными языками, хотя я не совсем уверен.

0 голосов
/ 24 января 2011

Я бы посмотрел вдаль Левенштейна.

Soundex довольно примитивен. Первоначально он был разработан для расчета вручную. Это дает ключ и хорошо работает с западными именами и фамилиями.

Расстояние Левенштейна рассматривает два строковых значения и выдает значение, основанное на их сходстве. Он ищет пропущенные или замененные буквы (без фонетического сравнения, как SoundEx).

Ссылка на Википедию: http://en.wikipedia.org/wiki/Levenstein_distance

Веб-сайт для проверки двух строковых значений с использованием расстояния Левенштейна: http://gtools.org/levenshtein-calculate.php

0 голосов
/ 24 января 2011

К сожалению, вы можете использовать в качестве AutoCompletionSource только AutoCompleteStringCollection.

Но логика того, что будет представлено пользователю (поле с соответствующими элементами под самим текстовым полем), полностью контролируется TextBox и никак не может быть затронута.

Таким образом, даже если вы используете что-то вроде SoundEx () или Levenstein Distance, вы не можете сказать ему TextBox, потому что он всегда создает String.StartsWith () для данной коллекции, а при выборе он заменяет весь контент выбор значения из источника.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...