C#数据绑定ComboBox:InvalidArgument =“SelectedIndex”的值'1'无效。

5

我在运行时向表单添加一个绑定的ComboBox(在Windows表单上),并且我在设置SelectedIndex时遇到了问题,我怀疑有一些奇怪的事情正在发生。

当我尝试这样做时,我会收到错误消息:“InvalidArgument = Value of '1' is not valid for 'SelectedIndex'。”

private void Form1_Load(object sender, EventArgs e)
        {
            List<string> comboBoxList = new List<string>();
            comboBoxList.Add("Apples");
            comboBoxList.Add("Oranges");
            comboBoxList.Add("Pears");

            ComboBox comboBox1 = new ComboBox();
            comboBox1.DataSource = comboBoxList;
            comboBox1.SelectedIndex = 1;
            this.Controls.Add(comboBox1);
        }

然而,如果我直接将项目添加到ComboBox中,就不会有问题,就像这样:

comboBox1.Add("Apples");

此外,如果我在设置SelectedIndex之前将控件添加到表单中,也没有问题,就像这样:
ComboBox comboBox1 = new ComboBox();
this.Controls.Add(comboBox1);
comboBox1.DataSource = comboBoxList;
comboBox1.SelectedIndex = 1;

有人能解释一下为什么在将控件添加到表单之前,我不能从数据源设置选定的索引吗?

1个回答

6

我的理解是数据绑定通常由bindingcontext处理,这通常是父表单的bindingcontext。因此,在将comboBox添加到表单之前,数据源绑定不会发生。 如果您将comboBox的bindingcontext设置为表单的bindingcontext,则也可以使其正常工作。

comboBox1.BindingContext = this.BindingContext;
comboBox1.DataSource = comboBoxList;
comboBox1.SelectedIndex = 1;
this.Controls.Add(comboBox1);

BindingContext 类

什么是 BindingContext


它不适用于WinForms,我以为这是一个ASP.NET控件。 - Aaron Fischer
感谢指出歧义 - 我已经澄清了问题。 - Robin Bennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接