我的Winform ComboBox是这样绑定的:
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项目。第一次尝试:
myComboBox.SelectedValue = (int)myType.prop2val;这不起作用:它将myComboBox.SelectedValue和SelectedItem设置为null。
第二次尝试:
myComboBox.SelectedItem = ((List<MyType>)myComboBox.DataSource)
.FirstOrDefault(a => a.prop2 == myType.prop2val);这句话行得通,但我觉得很难看。
我很肯定,我错过了什么东西,使第一次尝试的工作。任何帮助都很感激。
发布于 2017-10-03 16:56:12
最明显的原因是,myType.prop2类型和myComboBox.SelectedValue中的值类型是不同的类型。
正如您在注释类型MyType.prop2中所说的,long是SelectedValue,但是对于SelectedValue,则将值转换为int。
myComboBox.SelectedValue = (int)myType.prop2val;我不明白为什么需要将其转换为int,但无论如何,ValueMember中的属性类型和SelectedValue类型应该相同,以满足相等性。
ComboBox将值与object类型的值进行比较,因此long类型的装箱值将不等于int类型的装箱值。
ComboBox比较代码如下所示
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;https://stackoverflow.com/questions/46528037
复制相似问题