2012-03-19 8 views
2

В моем приложении у меня есть клиент, у которого может быть несколько местоположений. Когда вы выбираете клиента в моем выпадающем списке, он будет загружать comboboxes в панели flowlayout со всеми его местоположениями.Невозможно установить 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.

Я делаю что-то подобное вне цикла, а для combobox не создается в коде, и он работает там.

Alike code, but working

Я понятия не имею, что причиной этого? Это потому, что это в foreach, потому что я использовал его раньше из foreach, а затем он работал.

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

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

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

+0

Разделяет ли 'DisplayMember' и' ValueMember' перед установкой 'DataSource'? – V4Vendetta

+0

Просто попробовал, ничего не изменилось. Спасибо хоть! :) – Schoof

+0

Не связано с проблемой, но 'opstapPlaatsen.Count() <= 0' условная проверка не требуется, я думаю, поскольку она не будет в цикле в первую очередь. – V4Vendetta

ответ

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; 

Затем он работает, я надеюсь, что это может помочь кому-то!

+0

+1 Ваше решение помогло мне, спасибо! – tobsen

+1

Кстати, это должно быть в том же порядке, то есть, если вы сначала установили ValueMember, DisplayMember и DataSource, а затем добавили элемент управления в форму (это то, что я пытался сделать, поскольку моя комбо заполняется динамически из разных таблицы и может не найти источник), вы не сможете установить SelectedValue. – steven2308

1

При установке Valuemember и displayMember, пожалуйста, используйте 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

+0

Да, это всегда -1. И это неправильное значение. – Schoof

+0

Вы уверены, что в раскрывающемся списке есть элемент со значением opstapplaats.locatie_id? – PraveenVenu

Смежные вопросы