我们有一些问题与数据绑定,当它归结为null
-值。
例如,与复选框的数据绑定如下所示:
public void DataBindLambda<T>(IDBEntity entity, Expression<Func<T>> propertyLambda)
{
this.DataBindings.Add("Checked", entity, CodeUtils.GetPropertyName(propertyLambda), true, DataSourceUpdateMode.OnPropertyChanged);
}
现在,如果实体的字段可以为空(在数据库中),则绑定失败,返回System.FormatException: 'Value '' cannot be converted to type 'Boolean'.'
到目前为止,这是可以理解的,为了消除该错误,我们可以将空值处理为false:
public void DataBindLambda<T>(IDBEntity entity, Expression<Func<T>> propertyLambda)
{
this.DataBindings.Add("Checked", entity, CodeUtils.GetPropertyName(propertyLambda), true, DataSourceUpdateMode.OnPropertyChanged, false);
}
这适用于95%的复选框,我们可以将null
作为false
处理,但现在我们遇到了一个边缘情况,这不起作用:
数据库值反映要给予的批准状态:
null
尚未决定,批准人必须批准false
未获得批准true
已批准。
在这种情况下,将null
处理为false
的逻辑显然会导致不希望的结果。
它可以用其他方法解决,但是由于空值是数据绑定(日期、数值、布尔值)的一个反复出现的问题,我想知道通常如何解决这个问题?
是否有办法只以一种方式应用null
-替换?例如,说“如果数据库值为空,则认为它为假。如果选择了假,则将假应用于数据模型(而不是DB_NULL
)”
1条答案
按热度按时间thtygnil1#
如果数据可以为空,则将控件的
ThreeState
属性设置为true
,并绑定到CheckState
属性而不是Checked
。在这种情况下,您必须在DataTable
中可以为空的bool
数据和控件中的CheckState
值之间进行转换。为此,您需要在绑定上将FormattingEnabled
设置为true
(您是),然后处理Format
和Parse
事件。将数据从数据源传递到控件时引发Format
:将数据从控件传递到数据源时引发
Parse
: