Ich schaffe dynamisch eine Combobox wie folgt aus:C# Set Combo Artikel mit 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;
}
Das Problem ist, wenn die Ausführung cmb.SelectedValue = givenAnswers[0].AnswerId;
cmb.SelectedValue immer null ist.
Beim Debuggen und ich erkunde answers
(die Datenquelle) Ich sehe, dass Id (ValueMember) ist genau dasselbe wie AnswerId (in der if-Anweisung). Beide haben denselben Typ (lang) und denselben Wert, aber SelectedValue bleibt null.
Gibt es etwas, das ich nicht sehe?
EDIT:
Es sieht aus wie die Combobox leer bleibt. Wenn ich cmb.SelectedValue = givenAnswers[0].AnswerId;
durch cmb.SelectedIndex = 0;
ersetze, erhalte ich eine ArgumentOutOfRangeException. Dies, während die Antworten Sammlungen zählt 2. Also ist die Datenquelle nicht null ... Sehr strenge huh?
Lösung:
Die SelectedValue, SelectedIndex, SelectedItem Eigenschaften können nicht eingestellt werden, bis die Steuerung zu dem Formular hinzugefügt wird. Nachdem das Steuerelement dem Formular hinzugefügt wurde, können die Eigenschaften selectedValue, -Index und -Item festgelegt werden.
QuestionAnswer ist eine Unterklasse. Die Basisklasse enthält die Eigenschaften Id und Antwort, die beide mit einem Getter und Setter public sind. – Martijn