我想我偶然发现了.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相当,因为它绘制了所有自己的UI组件,而不是使用Win32 API。
有没有办法“强制”原生组合框根据相关值在列表中找到正确的项目,还是微软设计其原生组合框后开发的价值描述对的概念?
感谢您的任何见解
马龙
*edit*
下面的答案促使我快速开发测试应用程序,除非组合框位于数据网格视图中(与原始问题无关),否则我没有得到相同的行为。
对不起微软,我会删除这个问题,但我现在不能,啊,错误很好。
答案 0 :(得分:2)
解决方案是在设计器的DropDownStyle属性中设置DropDownList
答案 1 :(得分:1)
ComboBoxes和ListBox在表单值(索引)-Description(text)中有值对描述。
因此,如果组合框包含相同的描述,它们仍然是唯一的,因为它们没有相同的索引。
我要说的是.net中存在一个错误,而不是代码中存在错误。