2010-11-02 82 views
2

问题很奇怪,我有一个组合框,它通过数据源属性正确填充项目(它绑定到一个bindingSource项目,其中包含一个displaymember和一个valuemember),这是一个简单组合框允许我通过在他们的名字而不是他们的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

请参阅我对金王的评论回答:http://stackoverflow.com/questions/18343855/argh-how-do-you-correctly-update-the-selectedvalue-of-a-combobox-on-initializat – RLH 2013-08-20 20:54:57

回答

1

我解决了这个问题,实际上我认为Items集合是在第一个无效组合框的“周围”填充的,因此我只是将第一个无效之前提交的值作为SelectedValue存储在临时变量中,然后我只是将其设置在Invalidated事件下。

+1

我甚至不想知道它为什么可行 - 但它确实如此。 – skolima 2012-10-25 17:14:44

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”为int的ComboBox拒绝,除非你得到的类型正确地修正打球。

我可以理论认为,这与WinForms ComboBox是COM版本的包装有关,并且在创建本地控件后会显示不同的行为。

我希望这有助于您的特定问题!

+0

问题不在于,看我的问题更新,我解释得更好;顺便说一下,我注意到你也在说的问题,实际上我必须将它投入使用 – 2010-11-02 13:53:48

相关问题