C#、VS-2010、winforms
通常、バインド可能なMyPropertyを使用してユーザーコントロールを作成します。しかし、私はいくつかの問題に遭遇しました。現在の行が変更されると、データ行が変更されます。
C#プロジェクトをダウンロードして、自分で試すことができます: test_bind.zip
簡単にするために、私は次のようにしました。
- でテストフォームを作成する
- dataGridView(ReadOnlyに設定)、
- テキストボックス、
- いくつかのテーブルを持ついくつかの型付きデータセット
- bindingSource
- bindingSourceをテーブルにバインドします
- dgvをbindingSourceにバインドします
- TextBox.TextをbindingSourceにバインドしてテキスト列( "name")にバインドする
- いくつかのデータを含むフォームロードフィルテーブル。(手動で行を追加する場合は、AcceptChanges()を忘れないでください)
- テーブルxxx_ColumnChanging(...)のイベントハンドラーを追加し、そこにブレークポイントを設定します
すべての標準的な手順、特別なことは何もありません
走る
予想どおり-dgvの行、textBoxの現在の名前、グリッドの別の行をクリックします...テキストボックスのテキストを変更した場合にのみ、ブレークポイントで停止します。
プログラムを変更し、textBoxをTextではなく別のプロパティにバインドしましょう-Tagとしましょう。DataSourceUpdateProperty「OnValidation」または「OnPropertyChanged」を設定します。
走る
これで、現在の行が変更されます。!!!
textBoxの代わりにダミープロパティでUserControlを使用した場合も同じことが起こります
文字列MyProperty{セット; 得る; }
TextBox.Textと同じ動作でユーザーコントロールのカスタムプロパティをバインドするにはどうすればよいですか?
注: バインディングプロパティ自体は問題ではありません。問題は次のとおりです。標準のTextBox.Textプロパティにバインドすると-すべてOKWen他のプロパティ(タグ)またはユーザーコントロールのカスタムプロパティにバインドします-その後、データソースは常に現在の行に対して変更されます