问题很奇怪,我有一个通过DataSource属性正确填充项目的组合框(它绑定到一个bindingSource项,其中包含一个显示成员和一个值成员),这是一个简单的组合框,允许我选择供应商通过选择他们的名字而不是他们的ID。 问题是,当我更改SelectedValue因为我想要一个选项设置为默认值时,我发现List属性为空(我在另一个中继承了组合框),但是当显示组合框时,我有里面的项目,所以问题可能与WHEN数据真正从数据源加载有关(也许它只在显示后才加载?)。我应该何时更改我的SelectedValue?控件中没有任何“已显示”事件
感谢您的任何建议
更新1: 我按照你的方式进行了测试,但不是这种情况(关键是长的,但即使我把它投入也不行),实际上有趣的是我有一个setter,允许我设置SelectedValue,即使它没有'抛出异常,在下一个MessageBox中,Items.Count给我0作为值,这很奇怪,因为当组合框显示在表单上时它具有我想要的所有值。这是我的二传手的代码:
public object InputValue
{
get
{
return SelectedValue;
}
set
{
SelectedValue = ((long)value);
MessageBox.Show(this.Items.Count.ToString());
}
}
答案 0 :(得分:1)
你不是唯一经历过这个问题的人,很高兴听到这不仅仅是我。没有发生的事情与类型转换有关 - 如果您在数据源中明确地将SelectedValue
转换为完全类型,您会发现您可以设置值成功。
例如:
comboBox1.ValueMember = "Value";
comboBox1.DisplayMember = "Key";
object ds = new KeyValuePair<string, long>[] {
new KeyValuePair<string,long>("a",0),
new KeyValuePair<string,long>("b",1),
new KeyValuePair<string,long>("c",2),
new KeyValuePair<string,long>("d",3),
new KeyValuePair<string,long>("e",4)
};
comboBox1.DataSource = ds;
comboBox1.SelectedValue = 3; // this won't work
comboBox1.SelectedValue = (long)3; // this will work
无论出于何种原因,即使'3'作为一个长整数等于'3'作为一个整数,ComboBox
也会拒绝打球,除非你的类型精确正确。
我可以理解这与WinForms ComboBox
是COM版本的包装这一事实有关,并且在创建本机控件之后会显示不同的行为。
我希望这有助于解决您的特定问题!
答案 1 :(得分:1)
我解决了这个问题,事实上我认为Items集合被“围绕”组合框的第一次失效填充,所以我只是在第一次失效之前将提交的值存储为SelectedValue,然后我只是设置了它在Invalidated事件下。
答案 2 :(得分:0)
我遇到了这个问题,我将BindingSource.Current属性与绑定源的CurrentChanged()事件一起使用,并且可以正常工作