C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: DropDownListのカスタムコントロール作成について


(過去ログ 110 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■65376 / inTopicNo.1)  DropDownListのカスタムコントロール作成について
  
□投稿者/ LOC (8回)-(2013/02/21(Thu) 11:11:12)

分類:[ASP.NET (VB)] 

お世話になっております。LOCと申します。

DropDownListのカスタムコントロールを作成しようとしています。

開発環境:VS2010(ASP.NET + VB.NET)

カスタムコントロールの内容としては

・DropDownListの動作はそのまま継承する
・見た目はラベルのように枠線なし、▼ボタン(?)なし
・クリック時にリストを表示
・リスト選択時に選択した内容を表示

動作がDropDownListをそのまま継承した形になるので、
コントロールのスタイルのようなものを変えればよいのでは?と思ったのですが、
どのプロパティを変更したらよいかわかりません。

ご存知でしたら、ご教授お願い致します。


・・・もしかしてカスタムコントロールを作成しなくてもできるのでしょうか。


以上、宜しくお願い致します。
引用返信 編集キー/
■65397 / inTopicNo.2)  Re[1]: DropDownListのカスタムコントロール作成について
□投稿者/ WebSurfer (3回)-(2013/02/21(Thu) 20:59:26)
カスタムコントロールなど作る必要はないと思いますが。

普通に Label と DropDownList を両方使って、最初は Label のみ表示し、Label がクリックされたらポストバックして DropDownList に差し替えてはいかがですか。
引用返信 編集キー/
■65401 / inTopicNo.3)  Re[2]: DropDownListのカスタムコントロール作成について
□投稿者/ LOC (9回)-(2013/02/21(Thu) 21:48:26)
No65397 (WebSurfer さん) に返信
> カスタムコントロールなど作る必要はないと思いますが。
>
> 普通に Label と DropDownList を両方使って、最初は Label のみ表示し、Label がクリックされたらポストバックして DropDownList に差し替えてはいかがですか。


返信ありがとうございます。
ポストバックする方法も考えたのですが、GridView内に対象の列が約30個ほどあり、
一つ一つ表示したいLISTの内容が違います。

行数は最大で50件〜100件くらいです。

一つ一つポストバックしてもレスポンスが悪化したり、画面のちらつきが増えたりしないのでしょうか。
引用返信 編集キー/
■65402 / inTopicNo.4)  Re[3]: DropDownListのカスタムコントロール作成について
□投稿者/ WebSurfer (4回)-(2013/02/21(Thu) 22:08:51)
> 一つ一つポストバックしてもレスポンスが悪化したり、画面のちらつきが増えたりしないのでしょうか。

実際にやってみて、もし問題があるとすると、どこが問題か明確にしてから質問してはどうですか?
引用返信 編集キー/
■65405 / inTopicNo.5)  Re[4]: DropDownListのカスタムコントロール作成について
□投稿者/ LOC (10回)-(2013/02/21(Thu) 22:48:05)
No65402 (WebSurfer さん) に返信
>>一つ一つポストバックしてもレスポンスが悪化したり、画面のちらつきが増えたりしないのでしょうか。
>
> 実際にやってみて、もし問題があるとすると、どこが問題か明確にしてから質問してはどうですか?


そうですね。すみません。
少し、実装してみているのですが、
ラベルをクリックしてポストバックができません。

ラベルクリックというイベント捕捉するにはどのようにしたらよいのでしょうか。

初歩的な質問ばかりで申し訳ありません。
引用返信 編集キー/
■65406 / inTopicNo.6)  Re[5]: DropDownListのカスタムコントロール作成について
□投稿者/ じゃんぬねっと (8回)-(2013/02/22(Fri) 02:04:12)
じゃんぬねっと さんの Web サイト
No65405 (LOC さん) に返信
> > > 一つ一つポストバックしてもレスポンスが悪化したり、画面のちらつきが増えたりしないのでしょうか。

ご想像どおりになるでしょうね。AutoPostBack のあるリスト系のコンテナで実際に試してみるといいでしょう。

ヒント:
今は簡単に Ajax 化できる仕組みもあるので、Ajax で非同期にいろいろ取得できます。
また PostBack と言っても部分的なレンダリングが可能です。
自分は階層式の DropDown を作ったことがありますが、UpdatePanel 様様でしたね。

> ラベルをクリックしてポストバックができません。
> ラベルクリックというイベント捕捉するにはどのようにしたらよいのでしょうか。

うーん... ASP.NET はすばらしい技術で HTML の要素らを上手にブラックボックス化していると言えますが、
それがゆえに Label とはただの span 要素であるという意識も消えてしまうのでしょうか。

ところで、

> ・DropDownListの動作はそのまま継承する
> ・見た目はラベルのように枠線なし、▼ボタン(?)なし
> ・クリック時にリストを表示
> ・リスト選択時に選択した内容を表示

とありますが、DropDown ボタンの見た目はブラウザに依存しますし、
そう考えると DropDownList 自体を使うのは上策ではなく、Menu とか PopupExtender などを使った方がまだいーよーな。
PostBack がどうとか考える必要もなくなるでしょうから。
引用返信 編集キー/
■65409 / inTopicNo.7)  Re[6]: DropDownListのカスタムコントロール作成について
□投稿者/ LOC (11回)-(2013/02/22(Fri) 09:22:59)
じゃんぬねっと さん、返信ありがとうございます。

>>>>一つ一つポストバックしてもレスポンスが悪化したり、画面のちらつきが増えたりしないのでしょうか。
>
> ご想像どおりになるでしょうね。AutoPostBack のあるリスト系のコンテナで実際に試してみるといいでしょう。

これについては実際にいくつかのDropDownListを貼り付け、AutoPostBackさせてみました。
やはり画面のちらつきが増えました。。


> うーん... ASP.NET はすばらしい技術で HTML の要素らを上手にブラックボックス化していると言えますが、
> それがゆえに Label とはただの span 要素であるという意識も消えてしまうのでしょうか。

確かに span 要素であることを忘れていました。
span 要素では難しいんですね。



> とありますが、DropDown ボタンの見た目はブラウザに依存しますし、
> そう考えると DropDownList 自体を使うのは上策ではなく、Menu とか PopupExtender などを使った方がまだいーよーな。
> PostBack がどうとか考える必要もなくなるでしょうから。

Menu、PopupExtenderなどはまだ使ったことがなく、その考えが浮かびませんでした。

GridView内で表示するもの(名称)と非表示でもつもの(コード)が持てるか不安なところは
ありますが、チャレンジしてみます。
引用返信 編集キー/
■65426 / inTopicNo.8)  Re[7]: DropDownListのカスタムコントロール作成について
□投稿者/ WebSurfer (5回)-(2013/02/23(Sat) 06:02:48)
> 確かに span 要素であることを忘れていました。
> span 要素では難しいんですね。

ミスリードされたようですね。

span 要素であろうと何であろうと、クライアントイベントでポストバックすることは可能です。ASP.NET の機能を使えば難しくはありません。(簡単とは言いませんが)

ASP.NET はすばらしい技術で、html や JavaScript をほとんど知らない人にも、DOM のイベントにリスナーをアタッチし、そのリスナーでポストバックできるようにするための機能を提供しています。

ClientScriptManager.GetPostBackEventReference メソッド
http://msdn.microsoft.com/ja-jp/library/ms153112.aspx

加えて、クライアントで発生したイベントをサーバー側で処理する機能も提供しています。

IPostBackEventHandler.RaisePostBackEvent メソッド
http://msdn.microsoft.com/ja-jp/library/system.web.ui.ipostbackeventhandler.raisepostbackevent.aspx


実装例は、上に紹介した MSDN ライブラリと、以下のページを見てください。以下のページの前者は UpdatePanel を用いて画面のちらつきを抑えています。

__doPostBack を使ってはいけません
http://surferonwww.info/BlogEngine/post/2012/04/21/How-to-use-GetPostBackEventReference-and-RaisePostBackEvent-methods.aspx

CheckBox 付き Calendar コントロール
http://surferonwww.info/BlogEngine/post/2010/11/14/Calendar-control-with-CheckBox.aspx



ところで、GridView と DropDownList を組み合わせて使うということは、ユーザーが DropDownList の項目を選択して DB の更新をかけるというシナリオなのでしょうか?

そうであれば、Label をクリックして DropDownList を表示するというのではなく、[編集]ボタンクリックで当該行を編集モードにしたときに DropDownList が表示されればいいのではないですか?
引用返信 編集キー/
■65433 / inTopicNo.9)  Re[8]: DropDownListのカスタムコントロール作成について
□投稿者/ じゃんぬねっと (10回)-(2013/02/23(Sat) 15:16:46)
じゃんぬねっと さんの Web サイト
回答ではないです。

No65426 (WebSurfer さん) に返信
>>確かに span 要素であることを忘れていました。
>>span 要素では難しいんですね。
>
> ミスリードされたようですね。

フォローありがとうございます。

自分で言うのもなんですが、私が mis'l'ead したせいで mis'r'ead してしまったという感がありますね。

あ、自虐で misLead と書きましたが、意図的に悪意をもって誘導したわけでも、知りもしないで誤回答をしたという意味ではないです。
(↑会社の人も見ている BBS なので、自分の人格や技術を疑われないよう為念w)

意図としては「span 要素なのだから、Web の仕組みからしてクライアント側 (Script) で着火するしかないですよ」のつもりでした。
Ajax 経験者や、AutoPostback の仕組み (__doPostback) をご存じな方であれば問題なかったと思いますが、それはつまり、読み手に完全に委ねてしまうという不親切な書き方ということになりますよね...

回答の本筋は末尾に書いたことだったので、あまり考えずに書いてしまったと思います。
そして本筋の回答も、WebSurfer さんが補足して頂いているので重ね重ね感謝いたします。

もう少し丁寧な書き方をして、他の回答者様の手を煩わせないように気を付けたいと思います。
引用返信 編集キー/
■65458 / inTopicNo.10)  Re[9]: DropDownListのカスタムコントロール作成について
□投稿者/ LOC (12回)-(2013/02/27(Wed) 14:38:51)
返信遅くなりまして申し訳ありません。

WebSurferさん、じゃんぬねっとさん、わかりやすい回答ありがとうございました。

私のほうも理解できているつもりで書いてしまいました。申し訳ありません。
Label は Span 要素だからサーバ側の処理では難しいんですね。
と解釈してしまいました。。


ClientScriptManagerを使った方法で試してみたいと思います。


お二方、本当に丁寧な回答感謝いたします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -