在我的应用程序中,我有一个可以拥有多个位置的客户。 当您在我的下拉框中选择一个客户时,它会在一个包含所有位置的flowlayoutpanel中加载组合框。
这是我的代码:
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或/和Value。当我查看断点时,opstapplaats.locatie_id
(正确值)中有一个值,但SelectedValue
保留null
。
我在循环之外做了类似的事情,对于没有在代码中创建的组合框,它可以在那里工作。
我不知道造成这种情况的原因是什么?这是因为它是在一个foreach,因为我之前使用它,然后它工作。
谢谢,托马斯。
编辑:这个问题还没有解决,我不知道如何解决它。
编辑:这个问题似乎已经解决了。见接受的答案。
答案 0 :(得分:9)
原来你必须先将控件添加到面板,然后设置ValueMember
,DisplayMember
...
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;
然后它有效,我希望这可以帮助别人!
答案 1 :(得分:1)
设置Valuemember
和displayMember
时,请使用SelectedIndex
选择项目。
cbbOpstap.DataSource = Database.getLocaties();
cbbOpstap.ValueMember = "locatie_id";
cbbOpstap.DisplayMember = "FullAdress";
cbbOpstap.SelectedIndex = cbbOpstap.Items.IndexOf(opstapplaats.locatie_id);