- - PR -
[C#]DataGrid内でのDropDownListの処理
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-02 11:34
はじめまして。よろしくお願いします。
・環境 Visual Studio.NET2003(Visual C#.NET) Webアプリケーション ・内容 DataGridのフッターにて、DropDownListを3つ使用して 選択された項目に応じてリストの項目を変化させる物を作ろうとしています。 項目はデータベースから取得しており、その中のコードを使用して 項目を絞込みをかけて表示させようとしています。 |DB-A (DropDown-1) |-A-Code- -A-Name- | 1 A1 | 2 A2 |DB-B (DropDown-2) |-A-Code- -B-Code- -B-Name- | 1 1 B1 | 1 2 B2 | 2 1 B3 |DB-C (DropDown-3) |-A-Code- -B-Code- -C-Code- -C-Name- | 1 1 1 C1 | 1 1 2 C2 | 1 2 1 C3 | 1 2 2 C4 例) DropDown-1が「A1」 DropDown-2が「B1」の場合、 DropDown-3にはC1とC2の項目を表示 DropDown-1が「A1」 DropDown-2が「B2」の場合、 DropDown-3にはC3とC4の項目を表示 処理としては、 1、DropDown-1で選択している項目のValue(DD1)を取得 2、DD1を使用して、DB-Bに問い合わせを行い、結果をDropDown-2に表示し、 初期値をセットする 3、DropDown-1で選択している項目のValue(DD1)を取得 4、DropDown-2で選択している項目のValue(DD2)を取得 5、DD1とDD2を使用して、DB-Cに問い合わせを行い、結果をDropDown-2に表示し、 初期値をセットする *DropDown-1を変更した場合は1〜5の処理を DropDown-2を変更した場合は3〜5の処理を行う ・質問点 *DataGrid内のDropDownの選択項目を変更する際、どのようなEventが発生しているのか *DropDown部のSelectedValueの値の取得はどうすればよいか 思い当たる関数(コマンド?)は検索やMSDNを参照して試してみたのですが、うまくいきません、、、 わかりにくい文章で申し訳ありません… ご存知の方、ご教授の方よろしくおねがいします。 [ メッセージ編集済み 編集者: Leaf 編集日時 2006-06-02 11:37 ] [ メッセージ編集済み 編集者: Leaf 編集日時 2006-06-02 11:37 ] [ メッセージ編集済み 編集者: Leaf 編集日時 2006-06-02 13:05 ] | ||||
|
投稿日時: 2006-06-02 12:48
私も以前、似たような処理(webアプリで)をしたことがあります。
それを応用して書いてみました。 まず、デザイナのHTMLでフッタ行においたドロップダウンを以下のように記述します。 ポイントはAutoPostBackとOnSelectedIndexChangedです。 <FooterTemplate> <asp:DropDownList id="DropDown-1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDown-1_SelectedChanged"></asp:DropDownList> </FooterTemplate> そいで、サーバー側の処理として以下のイベント処理を書く。 protected void DropDown-1_SelectedChanged(object sender, EventArgs e) { DataGridItem dgi = null; DropDownList ddl = null; foreach(Control ctrl in DataGrid1.Controls) { foreach (Control childC in ctrl.Controls) { dgi = (DataGridItem)childC; if (dgi.ItemType == ListItemType.Footer) { ddl = (DropDownList)dgi.FindControl("DropDown-1"); if (ddl != null) { //ここでドロップダウンのSelectedValue等を取得 } } } } } この記述を3つ分書けばできませんか? あまりスマートではないかもしれないですが、 私はこれで実現させました。 [ メッセージ編集済み 編集者: しょくぱん 編集日時 2006-06-02 12:55 ] | ||||
|
投稿日時: 2006-06-02 13:45
>>しょくぱんさん
このソースを使って無事解決できました。 ありがとうございましたm(._.)m | ||||
|
投稿日時: 2006-06-02 15:56
すみません、、、追加で質問です。
DropDownの項目を変更した際に、DropDownの表示項目が一番上の項目に セットされてしまいます。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8730&forum=7 ↑などを参考に試してみたのですがかわりませんでした。 ご存知の方、ご教授よろしくお願いします。 | ||||
|
投稿日時: 2006-06-02 17:54
状況がちょっとわかりにくいので、確認させてください。
DropDown-1の選択を変更した後にDropDown-2の項目を設定し、 そのときDropDown-2の初期値を設定したい、ということでしょうか? | ||||
|
投稿日時: 2006-06-02 18:13
すみません 説明不足でした。 ・DropDown1の項目を変更する場合 1、DropDown1の項目を変更・選択した際に、Auto-PostBackが入ります。 2、Page_Load部が処理されます。 このときは何も処理を行っていません。 3、SelectedChangedイベントが開始されます。 処理内容: A)DropDown1で変更した項目のValue(D1-val)を取得 B)D1-valを使用してsqlDataAdapterよりDataSet(DS1)へデータを格納 C)DS1のデータをDropDown2へバインド 4、画面の表示 となっています。 このとき、1で選択したDropDown1の値を、4の画面にも反映させたいのですが、 リストの一番上の項目になってしまいます。 | ||||
|
投稿日時: 2006-06-02 19:17
むむむ。
私が試すと、何もせずともDropDown1は値を保持しています。。。 何が違うんでしょう? お役に立てずスイマセン・・・。 |
1