- - PR -
[C#] DataGridのフッターに入力用のDropDownListを配置したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-31 11:45
いつもお世話になっています。
C#(ASP.NET)でWebアプリを作成しています。 http://www.atmarkit.co.jp/fdotnet/dotnettips/085insertdg/insertdg.html ここを参考にDataGridのフッターに追加入力用のTextBoxを配置して追加できるように はなったのですが、今度はこのテンプレート列のフッターにTextBoxじゃなく DropDownListを配置したいのです。「テンプレートの編集」機能でDropDownListを DataGridのフッター内に置いてはあるんですが、このDropDownListに初期値を 持たせる為のイベントがよく分かりません。最終的にはDBから初期値を読み込んで 持たせたいのですがとりあえずテスト用にプログラムの中に直書きしようと思って います。 ItemCreatedイベントやItemDataBoundイベント等に DropDownList ddl1 = (DropDownList)e.Item.FindControl("ddl_meisai"); ddl1.Items.Add("aaa"); ddl1.Items.Add("bbb"); と書いてみましたがうまくいきません。 イベントが間違っているのでしょうか?それともそれ以前の問題なのでしょうか? ご存知の方、ご教授お願いします。 | ||||
|
投稿日時: 2006-05-31 17:58
はじめまして。
初投稿です。ドキドキ★ とりあえずいただいた情報から同じように書いてみました。 DataGridのItemDataBoundイベントにこのように書いたらうまく表示されましたよ? private void DataGrid1_ItemBound(object sender, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Footer) { DropDownList ddl = (DropDownList)e.Item.FindControl("ddl_meisai"); if (ddl != null) { ddl.Items.Add("aaa"); ddl.Items.Add("bbb"); } } } [ メッセージ編集済み 編集者: しょくぱん 編集日時 2006-05-31 21:47 ] | ||||
|
投稿日時: 2006-06-01 10:02
しょくぱんさん、ありがとうございます。
しょくぱんさんに示して頂いたコードを試したところ うまくいきました。本当にありがとうです。 ItemDataBoundイベントはDataGridにデータを連結した後に発生すると ヘルプに書いてあったので、何となくここかなぁとは思っていたんですが 具体的なコードが分からず困っていました if (e.Item.ItemType == ListItemType.Footer) 正直、未だこのif文が具体的に何を聞いているのかよく分かっていません。 たぶん、何かがフッターならこの処理みたいな意味だとは思うんですが これはどういう意味のif文なんでしょうか? | ||||
|
投稿日時: 2006-06-01 10:30
ん?、null でなければ Add する方法でうまくいった訳ですよね? どちらも、ItemDataBound イベントで処理させるのは同じと書いてありますが・・・ if (e.Item.ItemType == ListItemType.Footer) 正直、未だこのif文が具体的に何を聞いているのかよく分かっていません。 たぶん、何かがフッターならこの処理みたいな意味だとは思うんですが これはどういう意味のif文なんでしょうか? [/quote] | ||||
|
投稿日時: 2006-06-01 11:21
こんにちは。
もう少し注意深くヘルプを見てみると、いろいろわかるかもしれませんね。 たとえば、まず DataGrid.ItemDataBound イベント http://msdn2.microsoft.com/ja-JP/library/system.web.ui.webcontrols.datagrid.itemdatabound.aspx から、しょくぱんさんが参照している DataGridItemEventHandler とはなんだろう、と 調べて http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.datagriditemeventhandler.aspx ここにたどり着きますよね。 そこで e は DataGridItemEventArgs クラスだということがわかるので、そこから DataGridItemEventArgs クラスのメンバを探します http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.datagriditemeventargs_members.aspx 同様にリンクをたどっていって e.Item が DataGridItem クラスということでこれも同様に メンバを探します。 その中に ItemType (ListItemType クラス)があるので、そこを見ます。 http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.datagriditem.itemtype.aspx ここまでくるとわかるかと思いますが、 ItemDataBound イベントはデータ連結された後 に起こるイベントで、フッタのタイミング以外でも起きています。そして現在のイベントがど のタイミングで起きているのかを示すのが e.Item.ItemType だとわかるでしょう。 (慣れてくれば ListItemType.Footer を見ただけでキュピーンとくるようになると思います) しょくぱんさんの示していただいたコードは、まず現在のイベントが起きているタイミングがフ ッタであるかどうかを判別し、その上で ddl_meisai というコントロールを探し、それが存 在していれば項目を追加する、という処理をしています。 Q さんが最初に書かれたコードでは、フッタ以外のタイミングでも ddl_meisai というコン トロールを探し、存在しているかチェックせずに項目の追加を行っているので、実行時に ぬるぽ…もとい NullReferenceException が発生してしまうのではないでしょうか(フッ タ以外では見つからなさそうですし)。 悩んだときはヘルプ(MSDN)を目ン玉ぁかっぽじって見てみると、解決の糸口が見つかる ことも(結構な確率で)ありますのでがんばってみてください。 [ メッセージ編集済み 編集者: ぽぴ王子 編集日時 2006-06-01 11:22 ] |
1