我有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()
我没有收到任何错误。但是在另一台机器上,当我尝试在运行时打开表单时,我得到了上述异常。在设计时,一切正常。
控件有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));
问题出在哪里?
答案 0 :(得分:5)
我将代码更改为:
[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类作为我的绑定源的数据源。