如何从含指定成员编号的ComboBox项中获取完整显示文本?
ComboBox根据编号获取完整显示文本并预选中的解决方法
我的ComboBox项格式为编号;部件名,例如:
- 200;Heater
- 300;Cooler
- 400;Fan
选择部件时仅编号存入数据库,现在需要根据数据库中的编号预选中对应项,已经能判断项是否存在,但无法获取完整显示文本,之前用Where(...).ToString()只得到类型名,解决方法如下:
核心思路
先找到匹配编号的Part实例,再通过实例拼接文本或用ComboBox内置方法获取显示文本,同时完成预选中。
方法1:直接拼接属性生成完整文本
假设Part类的Membership属性是编号,Name属性是部件名:
void MembershipPreSelection(ComboBox cb, string text) { // 找到第一个匹配编号的Part实例 var matchedPart = cb.Items.Cast<Part>().FirstOrDefault(c => c.Membership.Contains(text)); if (matchedPart != null) { // 拼接成完整显示文本 string fullText = $"{matchedPart.Membership};{matchedPart.Name}"; // 预选中该项 cb.SelectedItem = matchedPart; } }
方法2:用ComboBox的GetItemText方法获取显示文本
如果ComboBox已经配置了DisplayMember,或者Part类的ToString()方法返回的是完整的编号;部件名格式,直接用GetItemText更省心:
void MembershipPreSelection(ComboBox cb, string text) { var matchedPart = cb.Items.Cast<Part>().FirstOrDefault(c => c.Membership.Contains(text)); if (matchedPart != null) { // 获取项的显示文本 string fullText = cb.GetItemText(matchedPart); // 预选中该项 cb.SelectedItem = matchedPart; } }
之前代码失败的原因
Where方法返回的是一个IEnumerable<Part>集合,直接调用ToString()只会输出集合的类型名称(比如System.Linq.Enumerable+WhereEnumerableIterator),必须先获取单个匹配的实例再处理。
内容的提问来源于stack exchange,提问作者Jocelyn
相关产品推荐
相关产品推荐

