我有一个用户控件,其中包含绑定到bindingSource的几个文本框。 我想将该用户控件放到另一个表单上,并将数据源传递给控件使用。
我尝试将用户控件的bindingSource设为public并将其设置为表单上的相同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.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属性。
答案 0 :(得分:0)
您前2行并设置设计师的绑定应该有效。问题是您的dataSource是一个集合,并且您正在尝试将其绑定到文本框。此方法仅适用于包含集合的控件(datagridview,listbox等)。但在您的情况下,为了将textBox绑定到某个属性,您需要dataSource为一个具有该属性的Person对象。
试试这一行:
this.formControl.bindingSource.DataSource = data.First();
并查看是否显示了您的文字。 如果要显示整个集合,而不是为集合中的每个对象创建一个textBox或更改控件类型。