- PR -

FormViewとObjectDataSourceの連携

1
投稿者投稿内容
hiropon
会議室デビュー日: 2007/01/24
投稿数: 5
お住まい・勤務地: 東京都
投稿日時: 2007-01-24 19:16
Visual Web Developer 2005 Express Editionを使用して、ASP.NET2.0のFormViewとObjectDataSourceによる単票形式の入力画面の実装方法をさぐっています。
FormViewでの更新リンククリック時のイベントの挙動について、教えていただきたく投稿しました。

以下のステップで単純なテーブルからビジネスオブジェクトを作成し、それを編集する画面を作成しました。

1.ビジネスオブジェクト
1-1.employeeid列とemployeenm列とtelno列をもつemployeeテーブルを作成。
  employeeid列が主キー。適当にデータを投入。
1-2.App_Codeフォルダ配下にデータセット(EmployeeDataSet.xsd)を作成。
  ウィザードで、とりあえず全件取得用のクエリー(SELECT * FROM employee)を設定。
  メソッド名にはFillとGetDataを設定。
1-3.テーブルアダプターへのクエリーの追加で、任意のレコード取得用のクエリー
  (SELECT * FROM employee WHERE employeeid=@employeeid)を設定。
  メソッド名にはFillByEmployeeIdとGetDataByEmployeeIdを設定。

2.ユーザーインターフェイス
2-1.Default.aspxにFormViewコントロール(FormView1)を配置。
2-2.FormView1のデータソースに、オブジェクト(ObjectDataSource1)を選択。
  ウィザードで、ビジネスオブジェクトに1.で作成したテーブルアダプター
  (EmployeeDataSetTableAdapters.EmployeeTableAdapter)を選択。
  SELECTメソッドに、1-3.で作成したGetDataByEmployeeId(String employeeid)を選択。
  SELECTメソッドのパラメータに、QueryStringのemployeeidを設定。
2-3.自動生成されたFormView1の各テンプレートのうち、EditItemTemplateの主キーの
  ラベルのバインドが片方向になっているので、両方向に変更。
2-4.Default.aspxのPage_Loadイベントハンドラで、FormView1のモードを
  FormViewMode.Editにすることで、むりやり編集状態になるように設定。

以上の設定をした上で、Default.aspx?employeeid=01のようにテーブルのレコードとして存在する主キーを指定してブラウザからアクセスすると、FormView1のEditItemTemplate上にemployeeidとemployeenmとtelnoの内容が正しく表示されるのですが、更新リンク(Update)をクリックした場合、ObjectDataSource1でUpdatingイベントとUpdatedイベントが発生した後、なぜかSelectingイベントとSelectedイベントが発生しています。
この二つのSelectイベントは、何のために発生しているのでしょうか?
また、発生しないようにすることはできるのでしょうか?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-24 19:28
Updateしたあと、更新後のデータをDBから取ってきて表示するためSelect関係の
イベントが発生するんじゃないでしょうか。
FormViewがそういう仕組みになっているのだと思います。
hiropon
会議室デビュー日: 2007/01/24
投稿数: 5
お住まい・勤務地: 東京都
投稿日時: 2007-01-25 14:18
どっとねっとふぁん様、貴重なご意見ありがとうございます。

更新リンク(Update)クリック後のFormViewとObjectDataSourceのイベント発生を追ってみたところ、FormViewのItemUpdatedイベントの発生後に、FormViewのModeChangingイベントが発生し、そこでFormViewModeEventArgsのNewModeがReadOnlyになっているため、更新後のデータを取得するべくObjectDataSourceのSelectingイベントが発生しているようです。

どうやら、挿入および更新コマンド後には、FormViewのDefaultModeプロパティに設定されているモードに移行するようで、このプロパティをInsertにすれば余計なObjectDataSourceのSelect関連イベントは発生しなくなりました。

FormViewで挿入・更新・削除のリンクをクリックした後は、別ページへリダイレクトする予定なので、これで一応OKなのですが、何かもっと良い策がないものかと考えています。
1

スキルアップ/キャリアアップ(JOB@IT)