我有一个DataGridView绑定到自定义对象列表。列绑定到double数据类型,当我尝试清空其内容(为null)时,它会抛出一个数据错误,指示DbNull无法转换为Double。我想要完成的是当用户输入数据绑定列的空值时,我想将其设置为默认的通用值,比如3.0。
我可以处理dataerror并替换那里的值,但这似乎是一个hackish解决方案。推荐的处理方式是什么?
编辑:
这是我的数据类。上面提到的双数据类型是USL。
public class SPCModelDTO
{
public string ProcessName { get; set; }
public string CustomerName { get; set; }
public string ModelName { get; set; }
public double USL { get; set; }
}
这是我的数据绑定代码
dgvModel.DataSource = new BindingList<SPCModelDTO>(modelList);
匹配属性名称在设计器中声明,与数据类属性相关。
作为旁注,我无法将USL的数据类型更改为可以为空的双。
答案 0 :(得分:0)
创建一个将绑定到DataGrdiView
的ViewModel
在ViewModel中,您可以将USL
包装在可空类型
public class SPCModelDTOViewModel: INotifyPropertyChanged
{
private SPCModelDTO _Model;
public double? USL
{
get { return _Model.USL;}
set
{
if(value.HasValue == false)
_Model.USL = 3.0;
else
_Model.USL = value;
this.RaisePropertyChangedEvent();
}
}
//Other model's properties
}
行this.RaisePropertyChangedEvent();
将通知View(DataGridView)有关更改,而empty(null)值将更改为默认值
当然,您的ViewModel类必须实现INotifyPropertyChanged
How to: Implement the INotifyPropertyChanged Interface
答案 1 :(得分:0)
for a databound column you can set DataSourceNullValue
in DatagridViewColumn.DefaultCellStyle
dgvModel.DataSource = data;
var col = dgvModel.Columns["USL"];
col.DefaultCellStyle.DataSourceNullValue = 3;