如何获取UltraComboEditor的ValueList列表项的索引?
解决方案
问题根因
你调用UltraComboEditor.Items.Add时传入的参数顺序为**(数据值, 显示文本)**,添加的枚举DisplayName存放在条目的显示文本字段。而你调用的ValueList.FindString方法默认匹配的是条目的数据值而非显示文本,因此无法匹配到对应条目,返回无效索引导致选中失败。
可用解决方法
方法1:使用专门匹配显示文本的查找方法(最符合你当前的写法)
UltraComboEditor的Items集合自带FindStringByDisplayText方法,专门用于匹配显示文本字段:
ddlType.SelectedIndex = ddlType.Items.FindStringByDisplayText(SalesPaymentType.CashPayment.DisplayName)
方法2:通过数据值匹配(稳定性最高)
直接给控件的Value属性赋值为枚举的Value值,控件会自动定位到对应条目,不需要手动查找索引:
' 无需处理SelectedIndex,控件自动匹配对应数据值的条目 ddlType.Value = SalesPaymentType.CashPayment.Value
方法3:指定FindString匹配显示文本列
如果一定要使用ValueList.FindString,可以传入第二个参数指定匹配显示文本对应的列索引(显示文本列索引为1,数据值列索引为0):
ddlType.SelectedIndex = ddlType.Items.ValueList.FindString(SalesPaymentType.CashPayment.DisplayName, 1)
注意事项
- 查找逻辑需要在控件条目全部加载完成后执行,不要在窗体
InitializeComponent方法执行完毕前调用,此时条目还未完成初始化会导致查找失败。 - 如果枚举DisplayName包含空格、特殊符号,建议先做Trim去空处理后再传入查找方法,避免匹配失败。
内容的提问来源于stack exchange,提问作者Randy
相关产品推荐
相关产品推荐

