Невозможно установить Combobox SelectedItem, Value - PullRequest
2 голосов
/ 19 марта 2012

В моем приложении есть клиент, который может иметь несколько мест.Когда вы выбираете клиента в моем раскрывающемся списке, он загружает комбинированные списки в поточную панель со всеми расположениями.

Это мой код для этого:

        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, потому что я использовал его раньше из foreach, а потом он работал.

Спасибо, Томас.

Редактировать: эта проблема еще не решена, и японятия не имею, как это решить.

Редактировать: эта проблема, похоже, решена.Смотрите принятый ответ.

Ответы [ 2 ]

9 голосов
/ 28 марта 2012

Оказывается, вы должны сначала добавить элемент управления на панель, а затем установить 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 голос
/ 19 марта 2012

Когда вы устанавливаете Valuemember и displayMember, используйте SelectedIndex для выбора элемента.

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