将Decimal绑定到NumericUpDown,其中Minimum不是0

时间:2013-02-13 15:58:21

标签: vb.net winforms data-binding

我将小数(从NHibernate实体)绑定到NumericUpDown。

_numUpDown.DataBindings.Add(
    New Binding(
        "Value", 
        _BindingSource, 
        "TheDecimal", 
        False, 
        DataSourceUpdateMode.OnPropertyChanged
    )
)

这很好用。但是,当我将NumericUpDown上的最小值从0更改为.01时,我收到错误。

来自设计师;

Me._numUpDown.Minimum = New Decimal(New Integer() {1, 0, 0, 131072})

错误;

1) System.InvalidOperationException 
---------------------------------------
Message: DataBinding cannot find a row in the list that is suitable for all bindings.
Target: Void FindGoodRow()
Source: System.Windows.Forms

当最小值不为0时,我该怎么做才能绑定它?

1 个答案:

答案 0 :(得分:0)

根据https://stackoverflow.com/a/10908342/429091,尝试将formattingEnabled参数(您设置为False的第四个参数)更改为True。这似乎会导致.net winforms忽略0m的默认小数值与NumericUpDown.Minimum之间的不兼容性。

通过此更改,NumericUpDown似乎忽略了任何不兼容的数据,并且在您曾经获得此Value的所有情况下,只保留其InvalidOperationException属性不被修改。我不知道为什么会这样。也许Binding.FormattingEnabled的文档在摘录中解释了它:

  

将此属性设置为true还会启用错误处理行为并导致引发BindingComplete事件。通过检查BindingCompleteState参数的BindingCompleteEventArgs属性,此事件的处理程序可以根据绑定过程中的成功,错误或异常采取适当的操作。

这可能意味着如果在启用格式化时想要使绑定失败,则必须实现该事件。我不确定这会有多大用处。也许您想要通知用户NumericUpDown中显示的值此时并未反映任何数据绑定项(因为列表中的所选项的值低于Minimum或因为列表中当前没有项目,因为它尚未填充或者没有任何项目。)