C#datagridview将数据绑定列值设置为选定的默认值

时间:2015-11-11 06:00:13

标签: c# .net winforms datagridview

我有一个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的数据类型更改为可以为空的双

2 个答案:

答案 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;