asp.netで次のリストボックスをフィルタリングする方法は?
質問
4つのリストボックス(lstStates、lstCounties、lstCities、およびlstZipcodes)があります。いくつかの制約があります:
-
無効になっているリストボックスはありません。
-
リストボックスはいつでも選択できます。つまり、ユーザーが選択する必要のある特定の順序はありません。
-
フィルタリングは前方および後方です。これにより、ユーザーがlstStatesから状態を選択すると、lstCounties、lstCities、およびlstZipcodesがフィルター処理されます。ユーザーがlstZipcodesから郵便番号を選択すると、lstCities、lstCounties、およびlstStatesがフィルタリングされます。
-
リストボックスでは複数の選択が可能です。
各リストボックスは、初期データを取得するためにデータテーブルにバインドされています。データテーブルは、sqlserverストアドプロシージャから取得されます。各リストボックスには独自のストアドプロシージャがあります。たとえば、lstStatesにはGetStatesという1つの列(State)を返すものがあり、ListBoxes DataValueFieldとDataTextFieldは両方ともStateに設定されます。 lstStatesと同様に、lstCitiesはdatatableにバインドされ、cityであるGetCitiesストアドプロシージャから1つの列を取得します。
もう1つ指摘したいのは、ObjectDataSourceを接続してデータテーブルを取得することです。
解決
すでに質問されています: c#での別の選択に基づいてリストボックスをフィルタリングする最も効率的な方法は何ですか?
[編集] 必要なのは、各[myListbox] _SelectedIndexChangedイベントにイベントを追加することです。選択が変更されたら、それらの選択に基づいて他のすべてのリストボックスを更新する必要があります。他の方法で州をZipCodesにリンクするのはbeいため、データベースでこれを処理する必要があると思います。したがって、おそらく、States <!> lt;-<!> gt; Zips <!> lt;-<!> gt; Counties関係のデータは、dbのどこかにあります。
したがって、Zipなどで状態を取得するprocをdb(またはLINQ中間層)に含める必要があります。選択変更イベントごとに、新しい選択をdb sprocに送り返し、戻りデータに基づいてリストボックスを再バインドします。 zipが渡されない場合など、すべての状態を返す各procに対して1つのsprocを作成できる必要があります。 [/編集]
他のヒント
明確にするために、ページの最初のロードでは、すべての郵便番号、すべての都市、すべての州、すべての国をロードしていますか?
これは少し面倒に思えます。これは、私が質問する要件のタイプです。 (あなたがまだ質問していないことや、それから何らかの良い答えが出たことを私は知りません。)
ScriptManager.RegisterStartupScript(Page、Page.GetType()、<!> quot; bab <!> quot ;, <!> quot; CacheItems(); <!> quot ;, true);
var ddlText、ddlValue、ddl、lblMesg; 関数CacheItems(){ ddlText = new Array(); ddlValue = new Array(); ddl = document.getElementById(<!> quot; <!> quot;); for(var i = 0; i