在C#中自定义类的数据绑定

时间:2009-09-21 10:54:16

标签: c# data-binding

我有一个这样的课程:

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

然后是一个Form,它选择了文本框来显示对象中的信息。当所选人员被更改时,这将被更新。

现在,对于简单字段,例如displayName,这是小菜一碟:

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

但是如何将另一个TextBox绑定到mainDetail属性的firstName?

这次尝试:

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

返回运行时错误:

“无法绑定到DataSource上的属性或列firstName。 参数名称:dataMember“

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

您必须使用属性进行绑定,而不是使用字段。

答案 1 :(得分: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; }
    }

答案 2 :(得分:0)

试试这个:

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

我认为这是正确的语法。

编辑: 这应该是正确的语法。 See here有关数据绑定属性的一些文档。

您的代码可能存在一个问题:您可能无法对字段使用数据绑定,因此您可能必须将它们转换为属性。

答案 3 :(得分:0)

Windows表单数据绑定对属性起作用,不支持字段。您绑定的属性也应声明为public