我的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
的{{1}}元素。
我正在尝试使用此项设置myType.prop2val
项。
第一次尝试:
Combobox
这不起作用:它将myComboBox.SelectedValue = (int)myType.prop2val;
和myComboBox.SelectedValue
设置为null。
第二次尝试:
SelectedItem
这条线有效,但我觉得很难看。
我很确定我错过了第一次尝试的工作。 任何帮助表示赞赏。
答案 0 :(得分:1)
您问题的最明显原因是myType.prop2
的类型和myComboBox.SelectedValue
中给出的值类型是不同的类型。
正如您在MyType.prop2
的评论中所说,long
是SelectedValue
,但对于int
,您将值转换为myComboBox.SelectedValue = (int)myType.prop2val;
。
int
我不明白为什么你需要将它强制转换为ValueMember
,但无论如何SelectedValue
中的属性类型和object
的类型应该相同以满足相等性。
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;
类型的盒装值。
ComboBox比较代码如下所示
{{1}}