C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: データにBindingしているTextコントロールについて


(過去ログ 10 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■1652 / inTopicNo.1)  データにBindingしているTextコントロールについて
  
□投稿者/ ゆき (2回)-(2007/03/01(Thu) 17:08:05)

分類:[VB.NET (Windows)] 

次のようなコントロールをフォーム上に配置しています。

kb(Text)
nm(text)
ds(DataSet)
bs(BindingSource)
vTESTTableAdapter(TableAdapter)

TextコントロールのDataBindingsプロパティでそれぞれ
kb → Tag:なし Text:bs - 区分
nm → Tag:なし Text:bs - 名称
と設定してテーブルとバインドしています。
これを実行すると、データは正しく表示されるのですが
既存データの更新が行えるかテストしてみたところ
どちらのTextコントロールも入力した値がds.vTESTに
反映されていませんでした。
更新処理には下記のようなことを書いているのですが
Me.bs.EndEdit()の前後でvTESTのデータを調べてみたところ
入力した値が反映されてこず困っています。
dr.RowStateもUnchangedのままです。
Modifiedになってほしいのですが・・・
このような問題が生じた場合、どの辺りを注意して確認したら
よいのでしょうか?
アドバイスよろしくお願いします。

更新処理
Me.Validate()
Me.bs.EndEdit()
For Each dr As DataRow In Me.ds.vTEST
Select Case dr.RowState
Case DataRowState.Added
dr(cst登録日付) = Format(Now, "yyyy/MM/dd")
dr(cst登録時間) = Format(Now, "HH:mm:ss")
Case DataRowState.Modified
dr(cst更新日付) = Format(Now, "yyyy/MM/dd")
dr(cst更新時間) = Format(Now, "HH:mm:ss")
End Select
Next
Me.vTESTTableAdapter.Update(ds.vTEST)

悩みに悩んで書いたのですが、非常に解かりにくい質問文に
なってしまいました(涙
足りない情報等ございましたらお知らせください。

開発環境等
VB歴1ヶ月
VS2005(言語VB)
SQL Server 2005
OS Win2K SP4
引用返信 編集キー/
■1718 / inTopicNo.2)  Re[1]: データにBindingしているTextコントロールについて
□投稿者/ はつね (95回)-(2007/03/04(Sun) 01:58:11)
はつね さんの Web サイト
No1652 (ゆき さん) に返信
> 更新処理
> Me.Validate()
> Me.bs.EndEdit()
> For Each dr As DataRow In Me.ds.vTEST
> Select Case dr.RowState
> Case DataRowState.Added
> dr(cst登録日付) = Format(Now, "yyyy/MM/dd")
> dr(cst登録時間) = Format(Now, "HH:mm:ss")
> Case DataRowState.Modified
> dr(cst更新日付) = Format(Now, "yyyy/MM/dd")
> dr(cst更新時間) = Format(Now, "HH:mm:ss")
> End Select
> Next
> Me.vTESTTableAdapter.Update(ds.vTEST)

これ、クライアント側で実装するとクライアントの時刻依存で全クライアントの時刻を合わせておく必要とか、だれか意図的に日時を変更して使うと嘘の日時が設定できてしまいますから、クライアントで実装せずにSQL Serverのトリガーとかで実装して、サーバの時刻で一元化した方が良いかと思います。

その問題をおいておくとして、このコードが意図したとおりに動くようにするためには、End SelectとNextの間にdr.EndEditが必要だと思います。「Me.bs.EndEdit()」の行がありますから、drを書き換えてからdr.EndEditを行わないとどういう状況になるかはご理解いただけると思います。

引用返信 編集キー/
■1742 / inTopicNo.3)  Re[2]: データにBindingしているTextコントロールについて
□投稿者/ ゆき (3回)-(2007/03/05(Mon) 13:08:18)
返信遅くなってしまいました、申し訳ありません。
はつね様、アドバイスありがとうございます。

> これ、クライアント側で実装するとクライアントの時刻依存で全クライアントの時刻を合わせておく必要とか、
> だれか意図的に日時を変更して使うと嘘の日時が設定できてしまいますから、
> クライアントで実装せずにSQL Serverのトリガーとかで実装して、サーバの時刻で一元化した方が良いかと思います。

なるほど〜、おっしゃる通りですね。
早速サーバー側で実装するよう改良したいと思います。

> その問題をおいておくとして、このコードが意図したとおりに動くようにするためには、
> End SelectとNextの間にdr.EndEditが必要だと思います。
> 「Me.bs.EndEdit()」の行がありますから、drを書き換えてからdr.EndEditを行わないとどういう状況になるかは
> ご理解いただけると思います。

登録日付等の項目は、ユーザーに入力してもらう項目ではないので
内部で値をセットするようにしたのですが、このような場合はdr.EndEditを使い
変更を反映するということですね。勉強になりました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -