无法设置Combobox SelectedItem,Value

时间:2012-03-19 08:36:45

标签: c# combobox foreach selecteditem selectedvalue

在我的应用程序中,我有一个可以拥有多个位置的客户。 当您在我的下拉框中选择一个客户时,它会在一个包含所有位置的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

我在循环之外做了类似的事情,对于没有在代码中创建的组合框,它可以在那里工作。

Alike code, but working

我不知道造成这种情况的原因是什么?这是因为它是在一个foreach,因为我之前使用它,然后它工作。

谢谢,托马斯。

编辑:这个问题还没有解决,我不知道如何解决它。

编辑:这个问题似乎已经解决了。见接受的答案。

2 个答案:

答案 0 :(得分: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;

然后它有效,我希望这可以帮助别人!

答案 1 :(得分:1)

设置ValuememberdisplayMember时,请使用SelectedIndex选择项目。

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