2014-10-10 108 views
2

財產或列我有2個實體:C#不能綁定到數據源

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

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

我有一個WinForms 1個文本框的客戶名稱和1個用戶控件的地址形成。用戶控件對每個地址屬性都有3個文本框。該表單有一個'客戶'綁定源和用戶控件'地址'綁定源。用戶控件看起來像這樣:

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

在設計模式中,我設置了窗體和用戶控件的數據成員。但是,一旦設置了地址usercontrol的數據成員,我就會收到上述錯誤,並且無法在設計模式下打開表單。

我在這裏錯過了什麼嗎?

回答

2

要解決了設計時間誤差我除去所有綁定源創建,數據源分配和控制數據從形式和用戶控制的構造函數和的InitializeComponent結合添加和包裹所有的方法中,主叫它:

  1. 在用戶控制:當處理OnLoad & VisibleChanged。
  2. 的主要形式:重寫OnShown時。

在這個特殊的主子結合,從主要形式加載調用時,因爲所有的電線已成立,但分配給它沒有數據幼兒使用者控制失敗...

關於實際執行: 我想有可能是一個更優雅的方式來使用屬性來做到這一點。我的方法是:

  1. 您必須將公共字段轉換爲實體類上的公共屬性。
  2. 將地址綁定源方法包裝在地址用戶控件中。

樣本屏幕截圖, '下一個' 前進綁定源位置,循環就結束:

next advances binding source position, looping on end

完整實現下面

  1. AddressUserControl

  2. Form

  3. Entities

+0

這是幾乎相同的,因爲我在做什麼。但是,我仍然得到上述錯誤。 – 2014-10-14 08:12:04

+0

我確定了我的原始答案。代碼鏈接也是新的... – 2014-10-15 10:20:25