首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置ComboBox SelectedValue

设置ComboBox SelectedValue
EN

Stack Overflow用户
提问于 2017-10-02 14:52:42
回答 1查看 1K关注 0票数 0

我的Winform ComboBox是这样绑定的:

代码语言:javascript
复制
this.myComboBox.DataSource = myDS;
this.myComboBox.DisplayMember = PropertyHelper<MyType>.NameOf(i => i.prop1);
this.myComboBox.ValueMember = PropertyHelper<MyType>.NameOf(i => i.prop2);

myDS确实包含一个MyType元素,其prop2值= myType.prop2val

我正在尝试用这个项目来设置Combobox项目。第一次尝试:

代码语言:javascript
复制
myComboBox.SelectedValue = (int)myType.prop2val;

这不起作用:它将myComboBox.SelectedValueSelectedItem设置为null。

第二次尝试:

代码语言:javascript
复制
myComboBox.SelectedItem = ((List<MyType>)myComboBox.DataSource)
                         .FirstOrDefault(a => a.prop2 == myType.prop2val);

这句话行得通,但我觉得很难看。

我很肯定,我错过了什么东西,使第一次尝试的工作。任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 16:56:12

最明显的原因是,myType.prop2类型和myComboBox.SelectedValue中的值类型是不同的类型。

正如您在注释类型MyType.prop2中所说的,longSelectedValue,但是对于SelectedValue,则将值转换为int

代码语言:javascript
复制
myComboBox.SelectedValue = (int)myType.prop2val;

我不明白为什么需要将其转换为int,但无论如何,ValueMember中的属性类型和SelectedValue类型应该相同,以满足相等性。

ComboBox将值与object类型的值进行比较,因此long类型的装箱值将不等于int类型的装箱值。

ComboBox比较代码如下所示

代码语言:javascript
复制
int givenSelectedValue = 2;

object selectedValue = givenSelectedValue;  // boxed to object type
for (int i = 0; i < internalDataSourceList.Count; i++) 
{
    object itemValue = // get value of list[i] and property from ValueMember
    if (selectedValue.Equals(itemValue)) 
    {
        return i; // Return index of selected item
    }
}

// if not found
return -1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46528037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档