【问题标题】:binding controls inside a user control在用户控件内绑定控件
【发布时间】:2014-10-18 22:22:31
【问题描述】:

我有一个用户控件,其中包含多个绑定到 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 属性。

【问题讨论】:

  • 将相同的绑定源传递给它时会出现什么错误?
  • 嗨@sparkysword 我更新了问题以显示没有错误消息,数据只是没有绑定。
  • @LarsTech 我更新了问题以表明我在设计时设置了 DataBindings.Text
  • Kirsten,我不认为将数据绑定的文本属性设置为特定字符串与执行 .add() 函数相同。在那个你实际上指向一个绑定源(bs),而不仅仅是一些随机(到 C#)字符集。
  • @sparkysword 我更新了问题以显示我使用的文本是在设计时选择的。这不是一些随机的字符集

标签: c# winforms data-binding


【解决方案1】:

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

试试这条线:

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

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

【讨论】:

    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 2012-06-20
    • 2011-05-21
    • 2011-07-09
    • 2016-01-17
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多