DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リレーションを設定した項目の即時反映

環境/言語:[VB.NET .NET Framework3.5]
分類:[.NET]

下記のソースのように、リレーションを作成し、データバインディングを利用して
表示、編集を行おうとしております。

そこで、Textbox2の値をユーザが変更した時に、Textbox3の値を連動して変更したいのです。

bs.EndEdit()
をコールすると、表示が変わるのですが、EndEditを行うと、CancelEditでキャンセルできなくなるので行いたくありません。

現在考えている方法としては、EndEditをとりあえず発行して、編集をキャンセルする場合、Fillしなおして、DBから再度読み込みなおすということですが、件数が多い場合
読み込みに時間がかかるのではないかという懸念があるので、あまり行いたくありません。

何か、方法があるのでしょうか?



以下ソース

Dim sc As New SqlConnection '実際にはコネクションの設定を行っています。
Dim ta1 As SqlDataAdapter
Dim ta2 As SqlDataAdapter
Dim ds As New DataSet
Dim bs As New BindingSource

ta1 = New SqlDataAdapter("SELECT UserID,Code FROM Table1", sc)
ta1.Fill(ds, "Table1")

ta2 = New SqlDataAdapter("SELECT Code,Name FROM Table2", sc)
ta2.Fill(ds, "Table2")

ds.Relations.Add(New DataRelation("Code", ds.Tables("Table1").Columns("Code"), _
ds.Tables("Table2").Columns("Code"), False))

bs.DataSource = ds
bs.DataMember = "Table1"

BindingNavigator1.BindingSource = bs

TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", bs, "UserID", True))
TextBox2.DataBindings.Add(New System.Windows.Forms.Binding("Text", bs, "Code", True))
TextBox3.DataBindings.Add(New System.Windows.Forms.Binding("Text", bs, "Code.Name", True))
TextBox3.ReadOnly = True
Bindingのコンストラクタの第五引数に、DataSourceUpdateMode.OnPropertyChangedを指定するのはどうでしょう?
■No30567に返信(Hongliangさんの記事)
> Bindingのコンストラクタの第五引数に、DataSourceUpdateMode.OnPropertyChangedを指定するのはどうでしょう?

TextBox2.DataBindings.Add(New System.Windows.Forms.Binding("Text", bs, "Code", True))
TextBox3.DataBindings.Add(New System.Windows.Forms.Binding("Text", bs, "Code.Name", True))

この2つにDataSourceUpdateMode.OnPropertyChangedを指定してみましたが
状況が変わりませんでした。


リレーショナルを作って連動させようとするより、BindingSourceのPositionChangedイベントや
TextBox2のValidatedイベントにて自前でセットするほうがいいのかな?って思ってしまいます。
TextBox2のValidatedイベントにて、DataSetの値が変更されていることが
確認できましたので、なんとかリフレッシュ出来ないものかと調べたところ
ds.CurrencyManager.Refreshにて出来そうなので実験したところ、思っていた
動作になりました。
また、CancelEditで編集をキャンセルすることもできました。


とりあえず、希望している動作を行うことが出来たので、これで解決済みと
させて頂きます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板