- - PR -
FormViewとObjectDataSourceの連携
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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イベントは、何のために発生しているのでしょうか? また、発生しないようにすることはできるのでしょうか? |
|
投稿日時: 2007-01-24 19:28
Updateしたあと、更新後のデータをDBから取ってきて表示するためSelect関係の
イベントが発生するんじゃないでしょうか。 FormViewがそういう仕組みになっているのだと思います。 |
|
投稿日時: 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