gpt4 book ai didi

c# - 在用户控件内绑定(bind)控件

转载 作者:行者123 更新时间:2023-11-30 18:28:11 26 4
gpt4 key购买 nike

我有一个用户控件,其中包含多个绑定(bind)到 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 的绑定(bind)源

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

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

没有错误信息,但是文本框没有显示数据。

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

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

但是我想知道为什么仅仅设置绑定(bind)源是不够的。

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

最佳答案

您的前 2 行和设置设计师的绑定(bind)应该有效。问题是您的 dataSource 是一个集合,您正试图将它绑定(bind)到一个文本框。此方法仅适用于包含集合的控件(datagridview、列表框等)。但在您的情况下,为了将文本框绑定(bind)到某个属性,您需要数据源是具有该属性的一个 Person 对象。

尝试这一行:

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

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

关于c# - 在用户控件内绑定(bind)控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com