2013-02-13 29 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或者因爲當前沒有項目名單,因爲它尚未填充或沒有任何項目)。

相關問題