繁体   English   中英

用户控件内的绑定控件

[英]binding controls inside a user control

我有一个用户控件,其中包含绑定到bindingSource的几个文本框。 我想将该用户控件放到另一个表单上,并将数据源传递给控件使用。

我已经尝试将用户控件的bindingSource公开并将其设置为表单上的相同bindingSource,

    List<Person> data = MyGetData(); // returns a list of people
    this.formControl.bindingSource.DataSource = data;   // where formControl is my user control containing bound text boxes.

在我的用户控件中,我有一个名为textboxFirstName的文本框,以及一个名为bindingSource的bindingsource

使用设计器,我将bindingSource.DataSource设置为Person,其中Person是我的域类之一。

同样使用设计器我将textboxFirstName.DataBindings.Text设置为“bindingSource - FirstName”,方法是从Person属性列表中选择它。

没有错误消息,但文本框未显示数据。

[更新]如果我创建以下过程并调用它,我可以使绑定工作。

    public void SetBinding(BindingSource bs)
    {
        this.bindingSource = bs;
        this.firstNameTextBox.DataBindings.Clear();
        this.firstNameTextBox.DataBindings.Add(new Binding("Text", bs, "firstName"));
    }

但是我想知道为什么单独设置绑定源是不够的。

请注意,在设计时我已将用户控件的bindingSource DataSource设置为People。 这使我能够从列表中选择文本框的DataBindings.Text属性。

你前2行并设置设计师的绑定应该工作。 问题是您的dataSource是一个集合,并且您正在尝试将其绑定到文本框。 此方法仅适用于包含集合的控件(datagridview,listbox等)。 但在您的情况下,为了将textBox绑定到某个属性,您需要将dataSource作为具有该属性的一个 Person对象。

试试这一行:

this.formControl.bindingSource.DataSource = data.First();

并查看您的文本是否显示。 如果要显示整个集合,而不是为集合中的每个对象创建一个textBox或更改控件类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM