Я динамически создаю комбинированный список вроде этого:
public Control GenerateList(Question question)
{
// Get a list with answer possibilities
List<QuestionAnswer> answers = question.GetAnswers();
// Get a collection of given answers
Collection<QuestionnaireAnswer> givenAnswers = question.GetFilledAnswers();
ComboBox cmb = new ComboBox();
cmb.Name = "cmb";
cmb.DataSource = answers;
cmb.DisplayMember = "Answer";
cmb.ValueMember = "Id";
// Check an answer is given to the question
if (givenAnswers != null && givenAnswers.Count > 0)
{
cmb.SelectedValue = givenAnswers[0].AnswerId;
}
cmb.DropDownStyle = ComboBoxStyle.DropDownList;
cmb.SelectedIndexChanged += new EventHandler(cmb_SelectedIndexChanged);
cmb.Leave += new EventHandler(cmb_Leave);
return cmb;
}
Проблема в том, что при выполнении cmb.SelectedValue = givenAnswers[0].AnswerId;
cmb.SelectedValue всегда равно нулю.
При отладке и исследовании answers
(источник данных) я вижу, что Id (ValueMember) в точности совпадает с AnswerId (в операторе if). Оба имеют одинаковый тип (long) и одинаковое значение, но SelectedValue остается нулевым.
Есть что-то, чего я не вижу?
EDIT:
Похоже, что поле со списком остается пустым. Когда я заменяю cmb.SelectedValue = givenAnswers[0].AnswerId;
на cmb.SelectedIndex = 0;
, я получаю ArgumentOutOfRangeException. В то время как количество ответов в ответе равно 2. Значит, источник данных не равен нулю ... Очень сильно, да?
Решение:
Свойства SelectedValue, SelectedIndex, SelectedItem не могут быть установлены, пока элемент управления не будет добавлен в форму. После добавления элемента управления в форму можно выбрать свойства selectedValue, -Index и -Item.