Estoy creando dinámicamente un cuadro combinado de la siguiente manera:C# Conjunto elemento combinado con 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;
}
El problema es que cuando se ejecuta cmb.SelectedValue = givenAnswers[0].AnswerId;
cmb.SelectedValue siempre es nula.
Al depurar y exploro answers
(el origen de datos) veo que Id (ValueMember) es exactamente igual que AnswerId (en la sentencia if). Ambos tienen el mismo tipo (largo) y el mismo valor, pero SelectedValue permanece nulo.
¿Hay algo que no vea?
EDIT:
Parece que el cuadro combinado se queda vacía. Cuando reemplazo cmb.SelectedValue = givenAnswers[0].AnswerId;
con cmb.SelectedIndex = 0;
obtengo una excepción ArgumentOutOfRangeException. Esto mientras que las colecciones de respuestas cuentan como 2. Entonces, el origen de datos no es nulo ... Muy fuerte, ¿eh?
Solución:
El SelectedValue, SelectedIndex, propiedades selectedItem no se pueden ajustar hasta que se añade el control al formulario. Después de agregar el control al formulario, se pueden establecer las propiedades SelectedValue, -Index y -Item.
PreguntaLa respuesta es una subclase. La clase base contiene las propiedades Id y Answer, que son públicas con un getter y un setter. – Martijn