2012-03-19 109 views
2

在我的應用程序中,我有一個可以有多個位置的客戶。 當您在我的下拉列表框中選擇一個客戶時,它將在所有位置的流佈局面板中加載組合框。無法設置Combobox SelectedItem,值爲

這是我的代碼如下:

 IEnumerable<locatie> opstapPlaatsen = Database.getOpstapplaatsen(klant.klant_id); 

     foreach (locatie opstapplaats in opstapPlaatsen) 
     { 

      if (opstapPlaatsen.Count() <= 0) 
      { 

      } 
      else 
      { 
       ComboBox cbbOpstap = new ComboBox(); 
       cbbOpstap.Width = 200; 
       cbbOpstap.Height = 20; 

       cbbOpstap.DataSource = Database.getLocaties(); 
       cbbOpstap.ValueMember = "locatie_id"; 
       cbbOpstap.SelectedValue = opstapplaats.locatie_id; 
       cbbOpstap.SelectedItem = opstapplaats; 
       cbbOpstap.DisplayMember = "FullAdress"; 

       flpOpstapplaats.Controls.Add(cbbOpstap); 
      } 
     } 

我的問題是,我不能設置的SelectedItem或/和價值。當我用斷點看時,opstapplaats.locatie_id(正確的)有一個值,但是SelectedValue保持爲null

我在循環之外做了類似的事情,並且沒有在代碼中創建組合框,並且它在那裏工作。

Alike code, but working

我不知道是什麼引起的?這是因爲它在foreach中,因爲我在foreach之前使用它,然後運行。

謝謝,托馬斯。

編輯:這個問題還沒有解決,我不知道如何解決它。

編輯:這個問題似乎解決了。看到接受的答案。

+0

在設置'DataSource'之前分配'DisplayMember'和'ValueMember'有什麼區別嗎? – V4Vendetta 2012-03-19 09:09:11

+0

剛剛嘗試過,沒有任何改變。雖然謝謝! :) – Schoof 2012-03-19 09:14:25

+0

與問題無關,但'opstapPlaatsen.Count()<= 0'條件檢查不是必需的,我認爲,因爲它不會在第一個循環中。 – V4Vendetta 2012-03-19 09:18:07

回答

9

原來你必須首先控制添加到面板上,然後設置ValueMemberDisplayMember ...

ComboBox cbbOpstap = new ComboBox(); 

cbbOpstap.Width = 200; 
cbbOpstap.Height = 20; 

flpOpstapplaats.Controls.Add(cbbOpstap); 

cbbOpstap.ValueMember = "locatie_id"; 
cbbOpstap.DisplayMember = "FullAdress"; 
bbOpstap.DataSource = LocatieManagement.getLocaties(); 

cbbOpstap.SelectedValue = opstapplaats.locatie_id; 
cbbOpstap.SelectedItem = opstapplaats; 

然後它的作品,我希望這可以幫助別人!

+0

+1您的解決方案幫助我,謝謝! – tobsen 2013-01-24 13:16:59

+1

順便說一下,它必須以相同的順序,即如果首先你設置ValueMember,DisplayMember和DataSource,然後你將控件添加到窗體(這是我試圖做的,因爲我的組合是從不同的動態填充表並且它可能找不到源),您將無法設置SelectedValue。 – steven2308 2015-02-25 14:16:11

1

當您設置ValuememberdisplayMember時,請使用SelectedIndex選擇一個項目。

cbbOpstap.DataSource = Database.getLocaties(); 
cbbOpstap.ValueMember = "locatie_id"; 
cbbOpstap.DisplayMember = "FullAdress"; 
cbbOpstap.SelectedIndex = cbbOpstap.Items.IndexOf(opstapplaats.locatie_id); 
+0

代碼有效,但它也不會更改SelectedIndex,它始終處於默認值(-1)。我已經做出了[截圖](http://i.imgur.com/QzbyR.png)的問題,澄清。 – Schoof 2012-03-19 09:04:57

+0

是的,它總是-1。這是不正確的價值。 – Schoof 2012-03-19 09:11:52

+0

您確定在下拉列表中有一個值爲opstapplaats.locatie_id的項目嗎? – PraveenVenu 2012-03-19 09:16:50