Комбинированный объект Набора C# с selectedValue

Я динамично создаю поле комбинированного списка как это:

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, - Индексу и - свойства Объекта могут быть установлены.

8
задан Martijn 19 May 2010 в 09:39
поделиться

4 ответа

Решение:

Свойства SelectedValue, SelectedIndex, SelectedItem нельзя установить, пока элемент управления не будет добавлен в форму. После добавления элемента управления в форму можно установить свойства selectedValue, -Index и -Item.

8
ответ дан 5 December 2019 в 11:22
поделиться

Убедитесь, что QuestionAnswer имеет общедоступные средства доступа, соответствующие (с таким же именем) элементам отображения / значения, которые вы используете.

0
ответ дан 5 December 2019 в 11:22
поделиться

Вы смотрите на то же свойство?

 cmb.ValueMember = "Id"; 
 ..
 cmb.SelectedValue = givenAnswers[0].AnswerId; 

Вы ссылаетесь на другой ValueMember, а затем на идентификатор, который вы публикуете в SelectedValue. Кроме того, вы можете попробовать установить свой Display- и Value-member перед привязкой данных. Это быстрее.

1
ответ дан 5 December 2019 в 11:22
поделиться

Я уже встречался с этой странной проблемой, в конце концов я сдался и использовал другой способ:

cmb.Items.FindByValue(givenAnswers[0].AnswerId).Selected = true;

Все работает нормально... Надеюсь, вам повезет!

3
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: