我将小数(从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时,我该怎么做才能绑定它?
答案 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
或因为列表中当前没有项目,因为它尚未填充或者没有任何项目。)