- ベストアンサー
ASP.Netイベント関数内でクラッシュエラーが発生する理由
- ASP.Netのイベント関数内でFormView.ItemUpdating関数を呼び出すことはできないため、クラッシュエラーが発生します。
- FormView.ItemUpdating関数を呼び出すためにはキャストエラーを修正する必要があります。正しい引数を指定してください。
- FormView.ItemUpdating関数の仕様上、呼び出すことができないため、要件を満たすことはできません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> TextBox のTextChangedイベントが実行されてしまうと、値を元に戻せないので、ItemUpdating メソッドが使えるのかなと思った次第であります。 これはなんか考え方がおかしいです。 検証コントロールは使っていて、そこでの検証に問題はない。 その状態でTextChangedイベントがあがってくる。 入力された内容で検証コントロール以外のチェックを行ったうえでデータの格納等を行いたい。 こういう状態だと認識しましたがあってますか? であれば、TextChangedイベントの中で最終的にやりたいデータの格納等の前に、データ内容の チェックを行なう処理を記述して、その後元の状態でエラーをつけて再度ページを表示するのか、 データを格納するなどして先にすすむのか、このあたりも自分でプログラムを記述することに なります。 たぶんAccess側のプログラムだと一画面についてデータを格納するかどうかを一箇所で 記述できるのでしょうが、ASP.NET側はそういう仕組みになっていません。 それぞれのコントロールに対してイベントを記述するので、そのイベントの中で必要な処理を 書いていくことになります。 Accessからの移植ということで同じようにしたい、というのはわかりますが、そこに とらわれているためにこのようなフレームワークや用意されたコントロールに合わない プログラムを書こうとして遠回りというか無駄な時間を使っているように思えます。 ASP.NETでの一連のデータの処理の仕方、というのを学習されることをおすすめします。
その他の回答 (2)
- WebSurfer
- ベストアンサー率55% (33/59)
> 例えば DropDownList の SelectedIndexChanged > TextBox のTextChanged などのイベント関数の中で、 > FormView.ItemUpdating 関数は呼び出せないものでしょうか? それに何の意味があるのかというのはとりあえず置いといて・・・ イベントハンドラと言えどメソッドですから、アクセス修飾子が許す範囲ならどこからでも呼び出せます。 エラーが出るのは、呼び出す際にメソッドの引数に代入する変数の型が合わないからでしょう。
補足
WebSurferさん お世話になります。 TextBox のTextChanged などのイベント関数の中でFormView.ItemUpdating 関数は呼び出す意味ですが、TextBoxの変更時にその値が検証コントロール以外で運営的にその値が不正だった場合に値を元に戻す事が目的なのですが、そもそもそういう使い方はできないのでしょうか?もし、そのような使い方ができるのでしたら、是非使いたいのです。 FormView.ItemUpdatingの引数ですが、ByVal e As FormViewUpdateEventArgs の部分の引数ですが、FormViewUpdateEventArgs.Empty を入れてみたのですが、エラーが出てしまいます。正しい変数の型とはこの場合どんな型で、データであるべきでしょうか? むちゃくちゃな質問なのかもしれませんが、もしお教えいただけますと大変助かる次第であります。
- onos
- ベストアンサー率81% (127/155)
そもそもの考え方になにか違ったところがあるよーな。。。 何をどうしたいのか、を整理して書いてみてもらえませんか? ItemUpdatingメソッドを呼び出すことを前提にしていますが、その前提ではなく、 そもそも何をしたいのか、がわかればそれを実現するための方法、考え方を 提示することもできると思います。 たぶん、コントロールとしてのFormViewは、通常のプログラム中から ItemUpdatingメソッドが呼び出されることは想定していないと思います。 #フレームワークから呼び出されたときに動作を変更するためにItemUpdatingが 用意されている、という感じじゃないかと。 入力されたデータで検証がからんでるのはわかりますが、そこでどのような データをどう処理したいのか、をきちんと整理してみてください。
補足
onosさん お世話になります。 現在Accessで作成されているシステムを自分なりにASP.Netに作り変えているところであります。Accessで言うところのBeforeUpDateイベント(入力されたデータを検証し、運営的に問題がある場合キャンセルできる 元に値に戻せる)と同じことができないかなと、以前質問をさせていただき、使えるイベントとして ItemUpdating の e.Cancel = True でそれが実現できるのかなと思っている次第であります。市販のツールで同じ事ができるコントロールがあるとの情報はいただいているのですが、まずは既存のコントロールやメソッドでそれらが本当に実現できないかと模索しているところでした。 TextBox のTextChangedイベントが実行されてしまうと、値を元に戻せないので、ItemUpdating メソッドが使えるのかなと思った次第であります。 ダミーコントロールを用意して、実際にデータバインドされているコントロールは隠しておいて、ダミーコントロールで検証を行いダメなら隠しコントロールの値を戻すという方法は見つけたのですが、このようなコントロールが多い場合は大変かなと思い、質問させていただいてる状況です。
お礼
onosさん お世話になります。 確かに自身で考えていくうちに、このやり方はASP.Net に適さないとだんだんわかってきました。隠しコントロールを作成し、ダミーのコントロールでTextChangedイベントで運用検証を行い、値が適さなかったら隠しコントロールの値を戻すような形で進めていこうと思います。 ご指摘どおりAccessの時の考え方にとらわれ過ぎておりました。 この時点で考え方を変えてみたいとおもいます。 ありがとうございました。