2012-03-19 104 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