繁体   English   中英

具有数据绑定为null属性值的NumericUpDown控件不起作用

[英]NumericUpDown control with DataBinding to null property value not working

我有一种方法可以将数字向上设置以显示对象中属性的值。 该属性值可以为null 如果是这种情况,我希望数字向下显示零。 这是我正在使用的代码:

    private void NudNullBindingSetup(NumericUpDown nud, MyObject obj, string propertyName)
    {
        var b = new Binding("Value", obj, propertyName, true,
                            DataSourceUpdateMode.OnPropertyChanged)
        {
            NullValue = 0,
            DataSourceNullValue = null
        };
        nud.DataBindings.Add(b);
    }

如果我在NumericUpDown中放置一个值,然后使用对该属性具有null的对象调用此绑定,则控件仍将显示原始值。

顺便说一句,如果对象实际上在属性中具有值,则此方法将完美工作。

我错过了什么?

编辑:我应该注意这是一个null而不是object属性中的DBNull.Value

编辑

您可以简单地设置:

NullValue = (decimal)0,
DataSourceNullValue = null

它按预期工作。

原版的

您可以使用Format事件解决问题。

将数据从数据源推入控件时,将引发Format事件。 您可以处理Format事件,以将数据源中的未格式化数据转换为可显示的格式化数据。

例如,这是我写的内容,并且按预期工作:

private void NudNullBindingSetup(NumericUpDown nud, MyObject obj, string propertyName)
{
    var b = new Binding("Value", obj, propertyName, true, DataSourceUpdateMode.OnPropertyChanged);
    b.NullValue = 0;                /*Only used in Format event*/
    b.DataSourceNullValue = null;   /*Only used in Format event*/
    b.Format += (s, e) =>
    {
        var binding = (Binding)s;
        var control = (NumericUpDown)binding.Control;

        control.Value =
            e.Value == binding.DataSourceNullValue ?
                (int)binding.NullValue : ((int?)e.Value).Value;
    };
    nud.DataBindings.Add(b);
}

这是MyObject

public class MyObject
{
    public int? Value { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM