【问题标题】:NumericUpDown control with DataBinding to null property value not working具有 DataBinding 到 null 属性值的 NumericUpDown 控件不起作用
【发布时间】:2015-11-19 15:07:29
【问题描述】:

我有一个方法可以设置一个数字 up down 来显示对象中属性的值。该属性值可能是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 而不是DBNull.Value

【问题讨论】:

  • 你设置NumericUpDown.Minimumproperty了吗?

标签: c# winforms data-binding


【解决方案1】:

编辑

你可以简单地设置:

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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2010-09-19
    • 2011-10-07
    相关资源
    最近更新 更多