- PR -

DropDownListのイベント発生時のアクションについて

1
投稿者投稿内容
hide
会議室デビュー日: 2005/05/24
投稿数: 18
投稿日時: 2005-05-24 23:14
はじめまして。現在VisalC#.netとASP.netでWeb系の開発をしている者です。
さて、VisalC#.netとASP.nettを使い、DataGridにDropDownListを入れて、DropDownListの中のデータを選択した後にアクションを起こしたいのです。
そのイベントを起こすアクションを下記のコードに書き込みました。
コード:
--------------------------------------------------------------------------------------

Private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DropDownList ddl1 = (DropDownList)e.item.FindControl("ddl1");

ddl1.SeletedIndexChanged += new EventHandler(ddl1_SelectIndexedChanged);
}

Private void ddl1_SelectIndexedChanged(object sender, EventArgs e)
{
DropDownList ddl1 = (DropDownList)FindControl("ddl1");
TextBox txtbox1 = (TextBox)FindControl("txtbox1");
  
  txtbox1.text = ddl1.SelectedValue;
}
--------------------------------------------------------------------------------------
となっているのですが、例えば上記のコードを作成してDropDownListと同じDataGrid内にあるTextBoxにDropDownListで選択したデータをTextboxに入れるのですが、SelectedIndexChangedイベント発生時に例外処理が発生します。
このコードを見て、どこを改善すれば例外処理を行わなくて済むのか、お教えいただけないでしょうか。
以上、よろしくお願いいたします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-05-25 00:07
引用:
SelectedIndexChangedイベント発生時に例外処理が発生します。

どんな例外かくらい書きましょう。

引用:
DropDownList ddl1 = (DropDownList)FindControl("ddl1");
TextBox txtbox1 = (TextBox)FindControl("txtbox1");

ここのddl1とかtxtbox1ってDataGrid1のおのおのの行にあるんですよね?

FindControlはどのオブジェクトのメソッドでしょう?多分Pageですよね。
そのページにddl1やtxtbox1というコントロールはないんですよね?HTMLソースを見て
みてください。「DataGrid1_ctl01_ddl1」のように各行のコントロールに固有のidが
割り当てられてると思います。これをFindControlで指定するか、どうにかして
変更されたDropDownListの行を取得してDataGrid1.Items[行数].FindControlで
やるか、でしょうか。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-05-25 06:14
引用:

Private void ddl1_SelectIndexedChanged(object sender, EventArgs e)
{
DropDownList ddl1 = (DropDownList)FindControl("ddl1");
TextBox txtbox1 = (TextBox)FindControl("txtbox1");
  txtbox1.text = ddl1.SelectedValue;
}


ddl1_SelectIndexedChangedイベントのの引数senderのParentから
DataGridItemオブジェクトを取得してDataGridItem.FindControlで
見つかると思いますがどうでしょうか。

_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
hide
会議室デビュー日: 2005/05/24
投稿数: 18
投稿日時: 2005-05-25 07:28
早急に解決しなければならないため、どんな例外処理が発生するか詳しく書かなかったのは誠に申し訳ございませんが、例えばSelectedIndexChengedイベントの中に「txtbox1.text = ddl1.SelectedValue;」だけ書いても「型または名前空間名がありません」という例外が発生します。また、オブジェクト取得時に「e.Item」が使えないため「FindControl」だけを記述しても、「オブジェクト参照がオブジェクトにインスタンスされませんでした」という例外が発生します。SelectedIndexChengedイベントの中にあるオブジェクトの設定に問題があるのではないのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-25 21:05
引用:

早急に解決しなければならないため、どんな例外処理が発生するか詳しく書かなかったのは誠に申し訳ございません


 それは考え方が間違っています。
 ここはサポートセンターではありません。情報交換の場です。必ず答えが返ってくるわけではありません。早急に、確実に解決したいなら、サポートセンターに問い合わせるべきです。

 問題解決のためには、例外情報は必須です。あなたが見ていることを、Webを通してみることはできません。あなたが持っている情報をすべて書き出す必要があります。急いでいるから情報を削る、等論外です。急いでいるなら、あなたが必要と思う以上の情報を書かなければなりません。


 「型または名前空間がありません」という“例外”が発生するのですか?コンパイル時にエラーになりませんか?
 EventArgs型のeにSelectedItemがないから、探そうとしている???Senderって、なんだと思います?Windowsアプリケーションと違って、Webアプリケーションの場合、イベントは「選択しようとしている」時ではなく、「選択した」から発生します。つまり、対象のドロップダウンの値はすでに変わっています。


 あとは、「急がば回れ」ということわざの意味を調べてください。そして、「急ぐための回り道」とは何か考え、実行しましょう。

_________________
hide
会議室デビュー日: 2005/05/24
投稿数: 18
投稿日時: 2005-05-27 23:09
先日は無礼なメールを送って誠に申し訳ございませんでした。べる様やAccess様のアドバイスのおかげでDropDownListのイベントが発生したときに正常に動く事ができました。
また、疑問に思ったことがありましたら、また投稿します。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)