【问题标题】:Can't set Combobox SelectedItem, Value无法设置组合框 SelectedItem、值
【发布时间】:2012-04-03 18:07:30
【问题描述】:

在我的应用程序中,我有一个可以拥有多个位置的客户。 当您在我的下拉框中选择客户时,它将在 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 或/和值。当我查看断点时,opstapplaats.locatie_id 中有一个值(正确的),但SelectedValue 保持在null

我在循环之外做了类似的事情,并且对于不是在代码中创建的组合框,它在那里工作。

我不知道是什么原因造成的?这是因为它在 foreach 中,因为我之前在 foreach 中使用过它,然后它就起作用了。

【问题讨论】:

  • 在设置DataSource 之前分配DisplayMemberValueMember 有什么不同吗?
  • 刚试了一下,没有任何变化。不过谢谢! :)
  • 与问题无关,但我认为不需要opstapPlaatsen.Count() &lt;= 0 条件检查,因为它首先不会在循环中。

标签: c# combobox foreach selecteditem selectedvalue


【解决方案1】:

原来你必须先将控件添加到面板,然后设置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;

然后它工作,我希望这可以帮助某人!

【讨论】:

  • 顺便说一句,它必须按照相同的顺序,即如果首先设置 ValueMember、DisplayMember 和 DataSource,然后将控件添加到表单中(这是我从我的组合是从不同的表动态填充的,它可能找不到源)您将无法设置 SelectedValue。
【解决方案2】:

当您设置ValuememberdisplayMember时,请使用SelectedIndex选择一个项目。

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

【讨论】:

  • 该代码有效,但它也不会更改 SelectedIndex,它仍然始终处于默认值 (-1)。我已经提出了a screenshot 的问题,澄清一下。
  • 您确定下拉菜单中有值为 opstapplaats.locatie_id 的项目吗?
  • @ThomasSchoof 只需检查您传递的值是否与Items 列表中的值相同。
  • 组合框中似乎没有项目,但数据源已填满! Here你可以看到填充的数据源,不知道是什么原因造成的?
  • 它是 web 应用程序还是 windows 应用程序?
猜你喜欢
  • 2021-09-12
  • 2017-04-26
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2023-03-11
  • 2011-02-22
  • 1970-01-01
相关资源
最近更新 更多