1

これが最も単純なシナリオです。いくつかのTextBoxとBindingSourceがあり、DataSetインスタンスにバインドされ、TextBoxがBindingSourceにバインドされているフォームがあります。CurrentItemChangedこれらのTextBoxにテキストを入力しても、BindingSourceでイベントは発生しません。フォーカスを別のテキストボックスに変更しても。別のレコードに移動したときにのみ起動します。これは、に期待されることCurrentChangedです。MSDNによると:

CurrentItemChangedイベントは、CurrentChangedイベントを発生させるすべての状況に応じて発生します。さらに、CurrentItemChangedは、Currentのプロパティの1つの値が変更されるたびに発生します。

EndEdit()を呼び出さないと、変更がコミットされるため、呼び出したくないことに注意してください。

編集

これが私のバインディングコードです。今、私も追加しましたOnPropertyChangedが、運がありません。

Me.bsCatItems.DataMember = "catalog_items"
Me.bsCatItems.DataSource = Me.DsInventory
Me.bsItems.DataSource = Me.bsCatItems
Me.bsItems.DataMember = "FK_CatalogItems_Items"
Me.TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.bsItems, "consignment_count", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
4

3 に答える 3

0

INotifyPropertyChangedイベントを発生させるには、インターフェイスを実装する必要があります。CurrentItemChangedバインディング ソースは自動的にPropertyChangedイベントをサブスクライブします。

INotifyPropertyChangedの実装方法の例を見るには、たとえばこのリンクを参照してください

于 2014-12-30T14:22:21.057 に答える
0

あなたが探しているのはDataSourceUpdateMode.OnPropertyChanged 、フォームにコントロールをバインドするときのデフォルトですOnValidation

OnPropertyChangedユーザーがコントロールに値を入力するたびに更新するには、 に変更する必要があります

this.MyTextbox.DataBindings.Add(new Binding("Text", this.bindingSource, "fieldName", true, DataSourceUpdateMode.OnPropertyChanged));

デザイナーからも実行できます (VisualStudio を使用している場合)。

于 2013-03-06T07:03:23.107 に答える
0

これがwinformsでどのように機能するかはわかりませんが、wpfではバインディングのupdatesourcetriggerをプロパティ変更に設定できます。これが設定されている場合、テキストボックスに何かを入力するたびに、propertychanged-event が発生します。

winformsには同等のメカニズムがあると確信しています。

于 2013-03-06T06:59:46.350 に答える