質問: ### 前提・実現したいこと ドロップダウンリストは親子関係が存在する。 親ドロップダウンリスト: ドロップダウンリスト1や2には「果物」「乗物」「飲物」などが入っています。 子ドロップダウンリスト: ドロップダウンリストで選択された種類に応じた数値や文字列が入っています。 果物:ブドウ、リンゴ、ナシ 乗物:車、電車、飛行機 ドロップダウンリスト1(親)でユーザーが「果物」を選択すると、ドロップダウンリスト1-1(子)に果物リストが出てくるようにしたい。 ドロップダウンリスト2(親)でユーザーが「乗物」を選択すると、ドロップダウンリスト2-1(子)に乗物リストが出てくるようにしたい。 ドロップダウンリスト2(親)でユーザーが「果物」を選択することも勿論可能。 ドロップダウンリスト(親)でユーザーが値を選択すると、その選択されたドロップダウンリスト(親)に関連した特定のドロップダウンリスト(子)が更新される。 を実現したい。 ※プロジェクト背景は質問末尾に記載 ### 発生している問題・エラーメッセージ SelectedIndexChangedイベントは正しく使用できており、 またUpdatePanelを利用して非同期にドロップダウンリスト(子)を変化させることもできています。 1つのSelectedIndexChangedイベントで全てのドロップダウンリスト(親)の変化イベントを取得したい場合、 自身のドロップダウンリスト(親)とそれに関連したドロップダウンリスト(子)の紐付け方がわかりません。 ドロップダウンリスト(親)によるイベントを2つ作れといわれればそれまでですし、 関数の中で分岐処理を作れといわれればそれまでなのですが・・・。 数が10コぐらいあるので1つのイベントでやりたいと思っています。 ### 該当のソースコード ASP.NET、C# ### プロジェクト背景 データベースから取得した情報をGridViewで表示したい。GridViewはDataTableを使用してBindさせること。 ユーザーがドロップダウンリスト(親)で条件を指定し、またその条件にあった選択肢をドロップダウンリスト(子)で非同期にデータベースから取得し更新すること。 ドロップダウンリスト(親-子)は10組ほど用意し、1レコードまでの絞込みを十分可能とすること。
回答: 質問者さんはどこかに行ってしまったようですね。 このまま放置されて終わるのも何ですので、質問者さんへの直接の回答ではないですが、コミュニティへの情報提供の意味で 2, 3 書いておきます。 > > ドロップダウンリスト1(親)でユーザーが「果物」を選択すると、ドロップダウンリスト1-1(子)に果物リストが出てくるようにしたい。 > > > 上記は、例えば、以下のようなデータベースがあって、ユーザーがドロップダウンリスト1(親)の Categories の中からある分類を選択すると、ドロップダウンリスト1-1(子)に Products から分類に従って選択された商品が表示されるということと理解します。 !イメージ説明 その場合は、SelectedIndexChanged イベントとそのハンドラを使う必要はなく、SqlDataSource を使って SelectParameters の設定をするだけで、ポストバックすれば(同期 / 非同期どちらでも)、パラメータが変更されたか否かを検出して処置してくれます。 具体的なコードは以下の通り。 ``` <%@ Page Language="C#" AutoEventWireup="true" CodeFile="0054-DropDownListsAndGridView.aspx.cs" Inherits="_0054_DropDownListInGridView" %> Category: Products: ``` 結果は以下のようになります。 !イメージ説明 次の、 > > ドロップダウンリスト2(親)でユーザーが「乗物」を選択すると、ドロップダウンリスト2-1(子)に乗物リストが出てくるようにしたい。 > > > ですが、これも上に書いた Products と Categories を同様なテーブルがあれば同じようにできるはずです。 ただし、その先の、 > > ドロップダウンリスト2(親)でユーザーが「果物」を選択することも勿論可能。 > > > 以降は意味が分かりませんので何の提案もできませんが。 あと、Ajax Control Toolkit に CascadingDropDown というものがあります。ご参考まで。 CascadingDropDown Demonstration