- 題名: SelectedIndexChangedが2回呼ばれる
- 日時: 2011/01/14 15:11:09
- ID: 28011
- この記事の返信元:
- (なし)
- この記事への返信:
- [28012] Re[1]: SelectedIndexChangedが2回呼ばれる2011/01/14 15:55:42
- ツリーを表示
■No28012 に返信(はちまきさんの記事) > そこで出力した情報GridView内のキャンセルボタンを設定しVB.NET側でキャンセル更新処理を実施する。 > といった流れをとっているのですが、gvCancelResult_SelectedIndexChangedが2回呼ばれます。 GridView の選択ボタンを押下すると GridView.SelectedIndexChanged イベントが2回発生 するということですか? うーむ、見当がつきません。GridView.SelectedIndexChanged イベントが2回発生することは どのように確認しましたか? > イベントを制御するようなフラグで操作するのが一般的なのでしょうか? GridView.SelectedIndexChanged イベントは2回発生しないのが一般的だと思います。
2011/01/17(Mon) 13:34:16 編集(投稿者) ■No28025に返信(るしぇさんの記事) 私への返信ということでよいのですかね。 > SelectedIndexChanged で処理してる意味と、キャンセルボタンとの関係が > 良くわからないんだけど。。。 <asp:GridView ... OnSelectedIndexChanged="gvCancelResult_SelectedIndexChanged"> <asp:ButtonField CommandName="Select" HeaderText="キャンセル" ShowHeader="True" Text="キャンセル" /> ご掲示いただいたコードを見る限り、選択ボタンの Text プロパティにキャンセルを設定しています。 これをキャンセルボタンと称されているのではないかと思います。 キャンセルボタンは選択ボタンであり、GridView.SelectedIndexChanged イベントは GridView の選択ボタンを押下したときに発生するイベントです。 キャンセルボタンを押下したときに SelectedIndexChanged イベントが発生するという関係かと 思います。 > ''明細番号取得 の row と strRowId は無関係?私が WEB のプログラムあまり > 触ってないからかもしれませんが、何を処理しているのか理解できませんでした。 コードは gvCancelResult_SelectedIndexChanged が2回呼ばれることと関係ありそうなところを 抜粋されているようなので、すべてを理解するのは無理かと思われます。文章を読む限りでは キャンセルボタン押下でキャンセル処理をされているのだと思います。 > 違う行にキャンセルボタンがあるのですか? なにと違う行なのかわかりませんが、GridView は行、列のあるいわゆる表形式の出力を行い、 キャンセルボタンは GridView のヘッダー行、フッター行、ページャー行を除くすべての行に あります。 > 1回呼ばれるのは問題ないのですか? SelectedIndexChanged イベントのハンドラーがということでよいですか。 SelectedIndexChanged イベントは GridView の選択ボタンを押下したときに発生します。 SelectedIndexChanged イベントのハンドラー gvCancelResult_SelectedIndexChanged は GridView コントロールの OnSelectedIndexChanged 属性に設定されて関連付けられています。 <asp:GridView ... OnSelectedIndexChanged="gvCancelResult_SelectedIndexChanged"> キャンセルボタンを押下したときに gvCancelResult_SelectedIndexChanged が1回呼ばれるの は問題ありません。そして、1回呼ばれるべきです。 よくみると Handles 句でもイベントハンドラーの設定がされており、 もしかすると、ハンドラーが2重に登録されてしまうのかもしれません。 Protected Sub gvCancelResult_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles gvCancelResult.SelectedIndexChanged >>GridView.SelectedIndexChanged イベントは2回発生しないのが一般的だと思います。 > GridView だとそういう動きなんですか?ローカルのコントロール(ListView, DataGridView) > では選択解除があるので、選択行を変更したのであれば2回発生する必要があると思いますが。 GridView では SelectedIndexChanged イベントが選択解除をトリガーとして発生することは ありません。以前の選択行を得たい場合には、選択行が切り替わる前に発生する SelectedIndexChanging イベントを利用します。 ポストバックごとに表示全体をレンダリングし直すので、選択している行のインデックスを参照して、 該当行に選択行専用のスタイルを適用するということになります。 選択行の変更に伴い SelectedIndexChanged イベントが2回発生する必要はありません。 Windows Form の知識は皆無なので、すこしずれた回答になっているかもしれませんが、 私の GridView コントロールの認識としてはこんな感じです。
■No28026 に返信(shuさんの記事) >>gvCancelResult.DataBind() > SelectedIndexChangedでこれが動くのでSelectedIndexChangedが > 2回発生しているのだと思います。 GridView.DataBind メソッドを呼ぶことで、GridView.SelectedIndexChanged イベントが発生 するということですか。 GridView.SelectedIndexChanged イベントは Button.Click イベントが GridView に伝播して 発生するものなので、GridView.DataBind メソッドを呼ぶことによっても発生するとは考え にくいです。 フラグを使うという結論を導くのは尚早なように思います。
分類:[ASP.NET]