2009-09-21 76 views
1

自定義類我有這樣一個類:數據綁定在C#

public class Person 
{ 
    Int32 id; 
    Boolean isMarried = false; 
    String displayName; 
    Detail mainDetail = new Detail(); 
    Detail partnerDetail = new Detail(); 
} 

public class Detail 
{ 
    String firstName; 
    String lastName; 
    DateTime dob; 
    String address; 
} 

然後它已經選擇文本框來顯示對象的信息表格。這將在所選人員更改時更新。

現在,對於簡單的領域,如顯示名,這是小菜一碟:

txtTitle.DataBindings.Add("Text", selectedPerson, "displayName"); 

,但我怎麼綁定另一個文本框的mainDetail財產的firstName?

這種嘗試:

txtFirstNameMain.DataBindings.Add("Text", selectedPerson.mainDetail, "firstName"); 

返回一個運行時錯誤:

「不能綁定到數據源的屬性或列的firstName 參數名稱:數據成員」

感謝您的幫助!

+0

你必須使用公共屬性,但我不認爲這是你的問題,否則沒有約束會起作用。 - 我假設你只是讓代碼更小來發布它。 – 2009-09-21 11:23:10

回答

2

你需要使用的公共屬性的數據綁定,就像這樣:

public partial class Form1 : Form 
    { 
     Person person; 
     public Form1() 
     { 
      InitializeComponent(); 

      person = new Person(); 
      this.titleTextBox.DataBindings.Add("Text", person, "DisplayName"); 
      this.firstNameTextBox.DataBindings.Add("Text", person.MainDetail, "FirstName"); 
     } 
    } 

    public class Person 
    { 
     public Int32 ID { get; set; } 
     public Boolean IsMarried { get; set; } 
     public String DisplayName { get; set; } 
     public Detail MainDetail { get; set; } 
     public Detail PartnerDetail { get; set; } 

     public Person() 
     { 
      MainDetail = new Detail(); 
      PartnerDetail = new Detail(); 
     } 
    } 

    public class Detail 
    { 
     public String FirstName { get; set; } 
     public String LastName { get; set; } 
     public DateTime DateOfBirth { get; set; } 
     public String Address { get; set; } 
    } 
0

試試這個:

txtFirstNameMain.DataBindings.Add("Text", selectedPerson, "mainDetail.firstName"); 

我認爲這是正確的語法。

編輯: 這應該是正確的語法。 See here有關數據綁定屬性的一些文檔。

雖然您的代碼可能存在一個問題:您可能無法對字段使用數據綁定,因此您可能必須將它們轉換爲屬性。

3

您必須使用屬性進行綁定,而不是字段。

0

Windows窗體數據綁定工作對性能和不支持的字段。您綁定的屬性也應聲明爲public