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

у меня есть 2 класса DTO:

public class AddressDto
{
    public string Street { get; set; }
    public string City { get; set; }
    public string PostCode { get: set: }
}

public class CustomerDto
{
    public int Number{ get; set; }
    public string Name { get; set; }
    public AddressDto Address { get: set: }

    public CustomerDto() 
    {
        Address = new AddressDto();
    }
}

у меня есть форма с источником привязки, который привязывается к CustomerDto. У меня также есть пользовательский элемент управления с полями адреса. Этот пользовательский элемент управления имеет источник привязки, который привязывается к AddressDto текстовые поля элемента управления правильно привязаны к свойствам адреса.

элемент управления предоставляет следующее свойство:

[Bindable(BindableSupport.Yes, BindingDirection.TwoWay)]
[Browsable(false)]
public object Address
{
    get { return bindingSource.DataSource; }
    set { bindingSource.DataSource = value; }
}

на одной машине я не получаю никаких ошибок на CheckBinding(). Однако на другой машине я получаю выше исключение, когда я пытаюсь открыть форму во время выполнения. В designtime все работает нормально.

управление имеет 3 TextBoxes и конструктор добавляет следующие привязки:

this.bindingSource.AllowNew = true;
this.bindingSource.DataSource = typeof(AddressDto);

this.txtStreet.DataBindings.Add(new Binding("Text", this.bindingSource, "Street", true));
this.txtCity.DataBindings.Add(new Binding("Text", this.bindingSource, "City", true));
this.txtPostCode.DataBindings.Add(new Binding("Text", this.bindingSource, "PostCode", true));

любые идеи, где проблема может быть?

1 ответов


Я изменил код на:

    [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)]
    [Browsable(false)]
    public object Address
    {
        get { return bindingSource.DataSource; }
        set 
        {
            if (value != null && value != System.DBNull.Value)
                bindingSource.DataSource = value;
            else
                bindingSource.DataSource = typeof(AddressDto);
        }
    }

значение System.DBNull. С вышеуказанным изменением исключение больше не выбрасывается.

Это решает проблему. Однако, почему значение DBNull все еще не ясно, потому что я использую чистые классы POCO в качестве моих источников данных для моих bindingsources.