我有一个这样的课程:
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“
感谢您的帮助!
答案 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
。