设置ComboBox SelectedValue

时间:2017-10-02 14:52:42

标签: c# winforms data-binding

我的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

这条线有效,但我觉得很难看。

我很确定我错过了第一次尝试的工作。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

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

正如您在MyType.prop2的评论中所说,longSelectedValue,但对于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}}