2

(NHibernate エンティティからの) 10 進数を 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 でない場合にバインドするにはどうすればよいですか?

4

1 に答える 1

0

https://stackoverflow.com/a/10908342/429091に基づいて、formattingEnabledパラメーター (に設定した 4 番目のパラメーターFalse) を に変更してみてくださいTrue。これにより、.net winforms が のデフォルトの 10 進数値0mNumericUpDown.Minimum.

この変更により、NumericUpDownは互換性のないデータを無視し、Valueこれを取得していたすべてのケースでそのプロパティを変更しないままにしているように見えるはずですInvalidOperationException。なぜそうなのかはわかりません。おそらく、のドキュメントはBinding.FormattingEnabled、この抜粋でそれを説明しています:

このプロパティを true に設定すると、エラー処理動作も有効になり、BindingCompleteイベントが発生します。このイベントのハンドラーは、 BindingCompleteEventArgsパラメーターのBindingCompleteStateプロパティを調べることにより、バインド プロセスの成功、エラー、または例外に基づいて、適切なアクションを実行できます。

つまり、この場合、フォーマットが有効になっているときにバインドを失敗させたい場合は、そのイベントを実装する必要があります。これがどれほど役立つかはわかりません。NumericUpDownに表示される値が現時点でデータバインドされたアイテムを反映していないことをユーザーに通知したい場合があります(リストで選択されたアイテムの値が よりもMinimum小さいか、現在リストにアイテムがないため)。まだ入力されていないか、アイテムがないだけです)。

于 2014-07-10T16:24:09.400 に答える