- - PR -
DataGrid内のHTMLボタンのClickイベント取得について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-03 16:52
返信が遅くなりました。
ぼのぼのさん返信ありがとうございます。
教えていただいたことを行ってみたのですが、PostBackされてしまいます。 やり方が悪いのかな…。 | ||||||||
|
投稿日時: 2005-10-03 18:12
そうですか…
カーソル移動制御のスクリプトと干渉しちゃってるのかな? とりあえずHTMLコントロールを使う方法を教えときます。 推奨しないと書いたのは、.NET Webアプリケーションのイベントモデルや、DataGridの内部的な実装を理解しないまま、「試してみたらうまくいっちゃった」という思いつきなアイデアだったため。 で、方法ですが、イベントモデルは使えなくても、とりあえずsubmitすればサーバ側のPage_Loadに処理は渡るので、DataGridのItemTemplateタグに以下のように書いてみたわけです。 <input type="button" value="HTMLボタン" onclick="Form1.submit();"> これで動かしてみると、とりあえずPage_Loadに処理は渡ってくるのですが、DataGrid内のどのボタンが押されたのか判別できません。これさえ分かれば、サーバ側の処理を実装できるわけです。 で、判別方法ですが、試しに上記のinputタグにrunat="server"と加えて、ビルドしてブラウザで表示させて、ソースを見てみたら、DataGrid1:_ctl2:_ctl1みたいなnameが付加されている。これがサーバ側に渡せれば良いかな?と思い、サーバコントロールのHiddenをページに追加して以下のように直してみました。 <input type="button" runat="server" value="HTMLボタン" onclick="Form1.Hidden1.value=this.name;Form1.submit();"> で、試してみたら、Page_Loadでnameが拾えました。 ただ、ちょっと不安なのは、「自動生成されるnameが常に一意な法則性に基づいてるのか?」つまり画面を表示するたびにnameが変わるようならサーバ側での分岐判定条件が単純でなくなるので。 これに関しては調べてないので、試してみてください。 #ちょっと日本語を修正 [ メッセージ編集済み 編集者: ぼのぼの 編集日時 2005-10-03 18:25 ] | ||||||||
|
投稿日時: 2005-10-03 20:04
ご参考→テキストボックスなどでEnterを押したときに1つ目のsubmitボタンを動作させたくない(中の技術日誌より)
これが「Enter キーで次のコントロールにフォーカスを移動する」を意味しているなら、それこそ止めるべきでしょう。 Windows、インターネットエクスプローラの使い方として、イレギュラーな操作です。他のアプリケーションでは、そのような動きをしません。 ユーザも、汎用機から移ってきて、今でこそ「Enter = カーソル移動」かもしれませんが、他のアプリケーションの使い方に慣れたとき、使いにくいアプリケーションになってしまいます。 それ以外にも Windows アプリケーションを導入するなら、早いうちからその作法に慣れるべきだと思います。 # いや、しばらく後に「使いにくい」と言われたんですよ(--# ___________________________________________________________________ □ written by Jitta on 2005/10/03 □ じったのノート □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2004-Sept.2006 _________________ |