Я думаю, что наткнулся на ошибку в .NET (или в собственном Windows API), связанную со списками.
Я приведу конкретный сценарий:
У меня есть две таблицы базы данных, между которыми имеется связь «один ко многим», краткое описание которой следующее:
Table: FinSage
Column Type
SageCode nvarchar(10) (PK)
Desc nvarchar(100)
Table: FinCode
Column Type
FinCode nvarchar(10) (PK)
Desc nvarchar(100)
SageCode nvarchar(10) (FK)
Они полностью поддерживаются пользователем, и только PK явно ограничен в уникальности. При создании или редактировании записи в таблице FinCode у меня на экране есть поле со списком, в котором элемент отображения привязан к столбцу Desc, а элемент значения связан с SageCode.
Проблема возникает, когда в столбце Desc есть повторяющиеся записи, что довольно часто встречается при ожидаемом использовании системы. Похоже, что поля со списком .net выполняют обратный поиск, используя отображаемое значение для получения значения элемента. Поэтому, когда поле со списком приобретает фокус, оно изменит значение на первое вхождение элемента отображения.
Я понимаю, что теоретически, если в отображаемом значении есть дубликаты, то поле со списком фактически не имеет смысла, так как пользователь не знает, какое значение он выбрал. Однако, как мы знаем, пользователи не совершенны, и поэтому они будут вводить одинаковое описательное значение для кода.
В настоящее время я справляюсь с этим, комбинируя код и описание, однако мой начальник хочет, чтобы они могли редактировать это значение, используя либо код, либо описание (поскольку некоторые пользователи предпочитают использовать одно или другое). Я попытался использовать два поля со списком, привязанных к одному и тому же источнику привязки, но увидел, что эта проблема возникает.
Извините за подробное описание, это не проблема, которую можно обобщить в коде.
В примечании, относящемся к некоторым аспектам, поля со списком, используемые Access, не содержат этой ошибки. Но я считаю, что Access сравним с WPF в том смысле, что он рисует все свои компоненты пользовательского интерфейса, а не использует Win32 API.
Нет ли способа «заставить» собственное поле со списком найти правильный элемент в списке на основе связанного значения, или концепция пары описание-значение была разработана после того, как Microsoft разработала их собственный поле со списком?
Спасибо за любые идеи
Marlon
*edit*
Приведенный ниже ответ побудил меня быстро разработать тестовое приложение, и я не получу такого же поведения, если только поле со списком не находится внутри таблицы данных (что не связано с исходным вопросом).
Извините, Майкрософт, я бы удалил этот вопрос, но сейчас не могу, ну, хорошо, ошибки хороши.