2010-11-02 83 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

相關問題