Привязка данных к пользовательскому классу в C # - PullRequest
1 голос
/ 21 сентября 2009

У меня есть такой класс:

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

А затем Форма, в которой выделены текстовые поля для отображения информации в объекте. Это должно быть обновлено, когда выбранный человек изменяется.

Теперь для простых полей, таких как displayName, это просто:

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

но как мне связать другой TextBox с firstName свойства mainDetail?

Эта попытка:

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

возвращает ошибку времени выполнения:

"Невозможно привязать свойство или столбец firstName в источнике данных. Имя параметра: dataMember "

Спасибо за вашу помощь!

Ответы [ 4 ]

3 голосов
/ 21 сентября 2009

Вы должны использовать свойства для привязки, а не поля.

2 голосов
/ 21 сентября 2009

вам нужно использовать общие свойства для привязки данных, например:

  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 голосов
/ 21 сентября 2009

Привязка данных в формах Windows работает со свойствами и не поддерживает поля. Свойства, к которым вы привязываете, также должны быть объявлены как public.

0 голосов
/ 21 сентября 2009

Попробуйте это:

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

Я думаю, что это правильный синтаксис.

Edit: Это должен быть правильный синтаксис. См. Здесь некоторую документацию по свойству привязки данных.

Однако в вашем коде может быть одна проблема: возможно, вы не сможете использовать привязку данных к полям, поэтому вам может потребоваться преобразовать их в свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...