我动态创建一个组合框是这样的: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
(数据源)时,我发现Id(ValueMember)与AnswerId(在if语句中)完全相同。两者具有相同的类型(长)和相同的值,但是SelectedValue保留为空。
有什么我看不到?
编辑:
它看起来像组合框保持为空。当我将cmb.SelectedValue = givenAnswers[0].AnswerId;
替换为cmb.SelectedIndex = 0;
时,我得到一个ArgumentOutOfRangeException。这个虽然答案集合计数是2.所以数据源不是空的......非常的强烈吧?
解决方案:
的的SelectedValue,SelectedIndex的,的SelectedItem属性不能直到控制被添加到形式设置。将控件添加到窗体后,可以设置selectedValue,-Index和-Item属性。
QuestionAnswer是一个子类。基类包含Id和Answer属性,它们都是公共的getter和setter。 – Martijn 2010-05-19 09:09:10