购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP


陷阱18
不容侵犯
——获取ComboBox的SelectedValue属性时存在的陷阱

1.陷阱产生的场景

ComboBox控件在应用程序开发中被经常用到,它分两个部分显示,顶部是一个允许用户键入列表项的文本框;第二部分是一个下拉列表框,它显示一个项列表,用户可从中选择一项。为了使ComboBox控件中的项能够动态获取,通常将该控件绑定到指定的数据源。虽然ComboBox控件这种动态绑定数据源的功能十分方便,但在应用时却存在一定的隐患。

例4.18 获取ComboBox的SelectedValue属性时存在的陷阱(光盘位置:光盘\MR\ Instance\4\18\UseComboBox),该实例的实现过程如下。

该实例实现添加商品销售记录,在应用程序的窗体中添加若干控件,其中包括一个ComboBox控件,通过该控件来选择销售人员的名字,该窗体如图4.35所示。

图4.35 应用ComboBox控件

窗体中的ComboBox控件绑定到销售人员数据表,具体绑定代码如下:

从上面的代码可以看出,ComboBox控件中显示的人员名称不是列表项的实际值,列表项的实际值是人员编号。

由于ComboBox控件的文本框部分可以输入文本,所以用户在使用时可能不从列表中选择需要的项,而直接在该控件的文本框中输入销售人员的名称。例如,本实例模仿用户在该控件的文本框中输入“东方”,然后单击“保存”按钮,这时程序弹出“销售人员为空,无法保存!”的提示框。“保存”按钮的Click事件代码如下:

明明已经在ComboBox控件中输入了一个列表中确实存在的销售人员名称(如图4.35所示,销售员东方确实存在列表中),但程序为什么仍然提示销售人员为空呢?

说明

由于本实例主要论述使用ComboBox控件时可能产生的陷阱,所以具体保存数据部分的代码被省略,仅给出相关文字提示。

2.陷阱的分析

ComboBox控件的SelectedValue属性表示列表中被选择项的实际值,再结合上面单击“保存”按钮时的提示信息,初步认定,在ComboBox控件的列表中,没有任何一个项被选定。接下来调试程序,并添加对ComboBox控件的快速监视,如图4.36所示。

图4.36 快速监视

“快速监视”窗口中显示ComboBox控件的Text属性值是东方,这是直接在该控件的文本框中输入的文本;ComboBox控件的SelectedIndex属性值为-1,表示未选定列表中的任何项;ComboBox控件的SelectedItem属性值为null,表示ComboBox控件当前没有选定项。这些足以说明,当ComboBox控件绑定到指定数据源之后,在该控件的文本框中直接输入的值不会被该控件所接受,即使输入的是列表中某个项的显示值也不例外。

3.陷阱的解决方法

解决思路就是,当ComboBox控件绑定到指定数据源之后,禁止从ComboBox控件的文本框中直接输入文本,只能够从列表中选择值。要实现这个功能并不困难,可以通过设置该控件的DropDownStyle属性来解决,该属性值是一个ComboBoxStyle类型的枚举值,当把该属性设置为ComboBoxStyle.DropDownList时,表示用户不能直接编辑ComboBox控件文本部分,而必须从列表中选择当前值。 ltXCMqbFd7EcKFmOJh6ZFV7AoBSHunthFdPH5j+za+ThmK3fxI0lWH6z9qb6bL1+

点击中间区域
呼出菜单
上一章
目录
下一章
×