C# 设置组合框SelectedValue

C# 设置组合框SelectedValue,c#,winforms,data-binding,C#,Winforms,Data Binding,我的Winform组合框的绑定方式如下: this.myComboBox.DataSource = myDS; this.myComboBox.DisplayMember = PropertyHelper<MyType>.NameOf(i => i.prop1); this.myComboBox.ValueMember = PropertyHelper<MyType>.NameOf(i => i.prop2); 这不起作用:它将myComboBox.Sele

我的Winform
组合框
的绑定方式如下:

this.myComboBox.DataSource = myDS;
this.myComboBox.DisplayMember = PropertyHelper<MyType>.NameOf(i => i.prop1);
this.myComboBox.ValueMember = PropertyHelper<MyType>.NameOf(i => i.prop2);
这不起作用:它将
myComboBox.SelectedValue
SelectedItem
设置为空

第二次尝试:

myComboBox.SelectedItem = ((List<MyType>)myComboBox.DataSource)
                         .FirstOrDefault(a => a.prop2 == myType.prop2val);

myComboBox.SelectedItem=((列表)myComboBox.DataSource)
.FirstOrDefault(a=>a.prop2==myType.prop2val);
这句话行得通,但我觉得很难看

我很确定我错过了第一次尝试的机会。
感谢您的帮助。

最明显的问题原因是
myType.prop2的类型和
mymbobox中给出的值的类型。SelectedValue
是不同的类型

正如您在注释中所说的那样,
MyType.prop2
的类型是
long
,但是对于
SelectedValue
您将值强制转换为
int

myComboBox.SelectedValue = (int)myType.prop2val;
我不明白为什么需要将其强制转换为
int
,但无论如何,
ValueMember
中属性的类型和
SelectedValue
的类型应该相同,以满足相等性

ComboBox将值作为类型
对象的值进行比较,因此类型
long
的装箱值将不等于类型
int
的装箱值
组合框比较代码如下所示

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;
int-givenSelectedValue=2;
object selectedValue=givenSelectedValue;//装箱到对象类型
for(int i=0;i
是否包含此.myComboBox.DataBind()<代码>myComboBox.SelectedItem=myType.prop2val
@Alander,不是webForms的DataBind()吗?组合框列出了DS的所有元素,只是没有在第一行代码中设置正确的元素。myType.prop2val的类型是什么?Yes!!我再也不确定为什么我第一次就设置了这样一个令人讨厌的角色。我把它取下来,它就像一个符咒。一吨法比奥!
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;