gpt4 book ai didi

C# 无法绑定(bind)到数据源上的属性或列

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:51 25 4
gpt4 key购买 nike

我有 2 个实体:

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

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

我有一个 WinForms 表单,其中包含 1 个用于客户名称的文本框和 1 个用于地址的用户控件。用户控件的每个地址属性都有 3 个文本框。表单有一个“客户”绑定(bind)源,用户控件有一个“地址”绑定(bind)源。用户控件看起来像这样:

[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;
}
}
}

在设计模式下,我设置了窗体和用户控件的数据成员。但是,一旦我设置了地址用户控件的数据成员,我就得到了上面的错误并且无法在设计模式下打开窗体。

我是不是漏掉了什么?

最佳答案

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

  1. 在用户控件中:处理 OnLoad 和 VisibleChanged 时。
  2. 在主窗体中:重写 OnShown 时。

在这个特定的主子绑定(bind)中,子用户控件在从主窗体加载调用时失败,因为所有连线都已设置,但尚未为其分配数据......

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

  1. 您必须将公共(public)字段转换为实体类的公共(public)属性。
  2. 将地址绑定(bind)源方法包装在地址用户控件中。

示例屏幕截图,'next' 前进绑定(bind)源位置,循环结束:

next advances binding source position, looping on end

下面的完整实现:

  1. AddressUserControl

  2. Form

  3. Entities

关于C# 无法绑定(bind)到数据源上的属性或列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26295424/

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