Я динамично создаю поле комбинированного списка как это:
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
(источник данных) я вижу, что идентификатор (ValueMember) является exactle то же как AnswerId (в если оператор). У обоих есть тот же тип (долго) и то же значение, но SelectedValue остается пустым.
Есть ли что-то, что я не вижу?
Править:
Похоже, что поле комбинированного списка остается пустым. Когда я заменяю cmb.SelectedValue = givenAnswers[0].AnswerId;
с cmb.SelectedIndex = 0;
Я получаю ArgumentOutOfRangeException. Это, в то время как количество наборов ответов равняется 2. Таким образом, источник данных не является пустым... Очень странный ха?
Решение:
SelectedValue, SelectedIndex, свойства SelectedItem не могут быть установлены, пока управление не добавляется к форме. После того, как управление добавляется к форме, selectedValue, - Индексу и - свойства Объекта могут быть установлены.
Решение:
Свойства SelectedValue, SelectedIndex, SelectedItem нельзя установить, пока элемент управления не будет добавлен в форму. После добавления элемента управления в форму можно установить свойства selectedValue, -Index и -Item.
Убедитесь, что QuestionAnswer
имеет общедоступные средства доступа, соответствующие (с таким же именем) элементам отображения / значения, которые вы используете.
Вы смотрите на то же свойство?
cmb.ValueMember = "Id";
..
cmb.SelectedValue = givenAnswers[0].AnswerId;
Вы ссылаетесь на другой ValueMember, а затем на идентификатор, который вы публикуете в SelectedValue. Кроме того, вы можете попробовать установить свой Display- и Value-member перед привязкой данных. Это быстрее.
Я уже встречался с этой странной проблемой, в конце концов я сдался и использовал другой способ:
cmb.Items.FindByValue(givenAnswers[0].AnswerId).Selected = true;
Все работает нормально... Надеюсь, вам повезет!