2

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

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

这工作正常。但是,当我将 NumericUpDown 的最小值从 0 更改为 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 时,我该怎么做才能使其绑定?

4

1 回答 1

0

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

通过此更改,看起来应该NumericUpDown忽略任何不兼容的数据,并且Value在您曾经获取 this 的所有情况下都保持其属性不变InvalidOperationException。我不知道为什么会这样。也许文档Binding.FormattingEnabled在此摘录中对其进行了解释:

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

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

于 2014-07-10T16:24:09.400 回答