2013-02-13 27 views
2

我将一个小数(从NHibernate实体)绑定到NumericUpDown。将Decimal与NumericUpDown绑定为0而不是0

_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时,我该怎么做才能使它绑定?

回答

0

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

随着这一变化,它应该出现的NumericUpDown被忽略任何不兼容的数据,只是留下了Value财产未修改在你用得到这个InvalidOperationException的所有案件。我不知道为什么会这样。也许的Binding.FormattingEnabled文档解释了它在此摘录:

将此属性设置为true,也使错误处理行为,会导致抛出了BindingComplete事件。通过检查BindingCompleteEventArgs参数的BindingCompleteState属性,此事件的处理程序可以根据绑定过程中的成功,错误或异常情况采取适当的操作。

这可能意味着,如果你想使绑定启用时格式化会失败在这种情况下,你必须执行该事件。我不知道这将是多么有用。也许您希望通知用户NumericUpDown中显示的值目前不反映任何数据绑定项目(可能是因为列表中的选定项目的值低于Minimum或者因为当前没有项目名单,因为它尚未填充或没有任何项目)。

相关问题