.net组合框,显示值中有重复项

时间:2011-03-02 11:19:32

标签: c# .net winforms user-interface combobox

我想我偶然发现了.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*
下面的答案促使我快速开发测试应用程序,除非组合框位于数据网格视图中(与原始问题无关),否则我没有得到相同的行为。

对不起微软,我会删除这个问题,但我现在不能,啊,错误很好。

2 个答案:

答案 0 :(得分:2)

解决方案是在设计器的DropDownStyle属性中设置DropDownList

答案 1 :(得分:1)

ComboBoxes和ListBox在表单值(索引)-Description(text)中有值对描述。

因此,如果组合框包含相同的描述,它们仍然是唯一的,因为它们没有相同的索引。

我要说的是.net中存在一个错误,而不是代码中存在错误。