我正在动态创建一个这样的组合框:
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 始终为 null。
在调试和探索 answers
(数据源)时,我看到 Id (ValueMember) 与 AnswerId(在 if 语句中)完全相同。两者具有相同的类型(long)和相同的值,但 SelectedValue 保持为空。
有什么我没看到的吗?
编辑:
组合框看起来是空的。当我将 cmb.SelectedValue = givenAnswers[0].AnswerId;
替换为 cmb.SelectedIndex = 0;
时,我得到一个 ArgumentOutOfRangeException。这虽然答案集合计数为 2。所以数据源不为空...非常强吧?
解决方案:
在将控件添加到窗体之前,无法设置 SelectedValue、SelectedIndex、SelectedItem 属性。将控件添加到窗体后,可以设置selectedValue、-Index和-Item属性。
最佳答案
解决方法:
在将控件添加到窗体之前,无法设置 SelectedValue、SelectedIndex、SelectedItem 属性。将控件添加到窗体后,可以设置selectedValue、-Index和-Item属性。
关于C# 使用 selectedValue 设置组合项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864065/