タイトル一覧   関連タグ: Web C#
タグ:Web C# タイトル:DropDownListのイベント発生について
1 2
1:  お名前:ガリバー 2005/05/24 14:32:45

初めての質問です。
ASPとC#を使って、
1.DataGridにDropDownListやテキストボックスを入れる。
2.DropDownListのAutoPostBackプロパティをtrueにする。
3.SelectIndexChangedイベントを使ってDataGridの中のテキストボックスの中にデータを入れたり、テキストボックスのEnableをTrueまたはFalseに設定したいのですが、うまくいきません。
何が原因なのでしょうか?教えてください。
2:  お名前:菊池 2005/05/24 15:29:04

うまくいかないというのはどの辺がうまくいかないのでしょうか?

そもそも、そうするコードが書けない?
PostBackが発生していない?
PostBackは出るがイベントハンドラが実行されない?
イベントハンドラも実行されるけどクライアントに出るHTMLに反映されない?

どのあたりでつまづいてるかをもうちょっと書いて頂けると答えやすいかと。

3:  お名前:じゃんぬねっと 2005/05/24 15:34:17

初めての質問なのはしょうがないけど、身勝手なのはどうかな。

http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=one&namber=10920&type=852&space=0&no=0

http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=439&rev=&no=0
4:  お名前:菊池 2005/05/24 16:00:27

てかマルチポスト指摘でスレ止めて結論出ないスレが乱立するのもウザ
自分のとこだけで良いだろそんな指摘するのは。


5:  お名前:ガリバー 2005/05/24 16:34:29

まず、DropDownListの設定ですが、
<asp:dropdownlist id="ddl1",runat="server",autopostback="true",OnSelectedIndexChanged="ddl1_SelectedIndexChanged">です。
次に、SelectedIndexChangedイベントの設定ですが、
<script language="c#" runat="server">
  void ddl1_SelectedIndexChanged(object sender,EventArgs e)
  {
 
  }
</script>です。
なお、DropDownListはDataGridに入っているため、voidの中に、"textbox1.Enabled = false" とそのまま入れると、実行前に「型または名前空間名が見つかりません」というエラーメッセージが表示され、ディレクトリ名を入れると、イベント発生時に「オブジェクト参照がオブジェクトインスタンスに設定されていません。」というエラーメッセージが表示されます。
DropDownListまたはSelectedIndexChangedイベントの設定で改善すべき点を教えてください。
6:  お名前:菊池 2005/05/24 16:54:37

普通は属性の区切りにカンマ , は使わないと思う。(使えるの?)

ディレクトリ名ってのが何を示しているのか解らないけど。
textbox1ってのはフォームの中?、それともDataGridの中?


DataGrid内のコントロールからのイベントを捕まえるには手順があって

http://www.ailight.jp/blog/kazuk/archive/2005/02/10/4369.aspx

なんかを参照してみてください。

要点としてはItemCreatedを捕まえてイベントを引っ掛けないとDataGridにDataBindが行われて中身が作られる以前(対象コントロールが生成される前)にイベントの引っ掛けが走ってしまい存在しないコントロールに触って死にます。

7:  お名前:ガリバー 2005/05/24 17:28:05

textbox1はDataGridの中にあります。
ただ、SelectedIndexChangedイベントはデリゲート型のイベントであるため、DataGrid内のtextBoxのオブジェクトを設定するときに"Item"を設定することができません。
8:  お名前:ガリバー 2005/05/24 17:47:42

先ほどの訂正ですが、SelectedIndexChangedイベントは(object sender,System.EventArgs e)でないと駄目なため、DataGrid内のtextBoxのオブジェクトを設定するときに"Item"や"FindControl"を設定することができません。

9:  お名前:菊池 2005/05/24 17:47:50

なるほどねー。

textBoxのプロパティを触れないって問題はSelectedIndexChangedを捕まえるだけでは解決しないと思います。

簡単に解決するには DataGridの元となるDataSourceにEnabledに結合するboolなカラムを作ってEnabled をデータバインドで与える様にするかな。(SelectedIndexChangedではそのカラムを更新することで間接的にEnabledを与えます)

面倒な方法だとItemCreatedでアイテムの生成を逐一追いかけて目的のTextBoxをDataGridから貰って処理する感じかな。

10:  お名前:ガリバー 2005/05/24 18:44:12

「DataGridの元となるDataSourceにEnabledに結合するboolなカラムを作ってEnabled をデータバインドで与える様にする」あるいは「ItemCreatedでアイテムの生成を逐一追いかけて目的のTextBoxをDataGridから貰って処理する」というやり方は知りません。もう少しわかりやすく説明してくれないでしょうか?
1 2
お名前
メッセージ
次回のために入力情報を記録