Не удается выполнить привязку к свойству или столбцу "имя столбца" в источнике данных. Имя параметра: 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.