C#无法绑定到DataSource上的属性或列

时间:2014-10-10 08:49:26

标签: c# winforms

我有两个实体:

public class Address
{
    public string Street, City, State;
}

public class Customer
{
    public int Id;
    public string Name;
    public Address Address;
}

我有一个WinForms表单,其中1个文本框用于客户名称,1个用户控件用于地址。用户控件为每个地址属性有3个文本框。表格中有一位客户' bindingsource和usercontrol一个地址' BindingSource的。用户控件看起来像这样:

[DefaultBindingProperty("Address")]
public partial class AddressBox : UserControl
{
    private Address address;

    [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)]
    [Browsable(false)]
    public Address Address
    {
        get { return address; }
        set
        {
            address = value;
            bindingSource.DataSource = address;
        }
    }
}

在deisgn模式下,我设置了表单的数据名称和用户控件。但是,一旦我设置地址usercontrol的数据名称,我就会出现上述错误,无法在设计模式下打开表单。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:2)

修复设计时错误 我从表单和用户控件的构造函数和InitializeComponent中删除了所有绑定源创建,数据源分配和控件数据绑定添加,并将其包装在方法中,调用它:

    用户控件中的
  1. :处理OnLoad& VisibleChanged。
  2. 的主要形式:覆盖OnShown。
  3. 在这个特定的主子绑定中,从主窗体加载调用时,子用户控件失败,因为所有连线都已设置,但尚未分配给它...

    关于实际实施: 我想可能有一种更优雅的方式来使用属性来做到这一点。我的方式是这样的:

    1. 您必须将公共字段转换为实体类的公共属性。
    2. 将地址绑定源方法包装在地址用户控件中。
    3. 示例屏幕截图,' next'提升绑定源位置,循环结束:

      next advances binding source position, looping on end

      完成以下

      的实施
      1. AddressUserControl

      2. Form

      3. Entities