2009-01-06 7 views
0

J'ai 4 listboxes (lstStates, lstCounties, lstCities et lstZipcodes). Voici quelques contraintes:Comment filtrer les listboxes suivantes dans asp.net?

  • Aucune zone de liste n'est désactivée.

  • Toute liste de sélection peut être sélectionnée à tout moment, ce qui signifie qu'il n'y a pas d'ordre spécifique que l'utilisateur doit choisir.

  • Le filtrage est en avant et en arrière. Par ceci, je veux dire que si un utilisateur sélectionne un état de lstStates, il va filtrer lstCounties, lstCities et lstZipcodes. Si un utilisateur sélectionne un code postal à partir de lstZipcodes, il va filtrer lstCities, lstCounties et lstStates.

  • Les zones de liste permettent plusieurs sélections.

Chaque zone de liste est liée à une base de données pour obtenir ses données initiales. Le datatable est extrait d'une procédure stockée sqlserver. Chaque listbox a sa propre procédure stockée, par exemple, lstStates a un GetStates qui renvoie une colonne (State) et ListBoxes DataValueField et DataTextField sont tous deux définis sur State. Similaire à lstStates, lstCities est lié à une datatable qui obtient une colonne d'un proc stocké GetCities qui est city.

Une autre chose que je veux souligner est que je connecte un ObjectDataSource pour obtenir la datatable.

Répondre

2

déjà été posée: What is the most efficient way to filter listboxes based on selections of another in c#?

[modifier] OK, ce que vous devez faire est d'ajouter un événement à chaque [MaListbox] événement _SelectedIndexChanged. Lorsque la sélection est modifiée, vous devez actualiser toutes les autres listes en fonction de ces sélections. Je suppose que cela doit être géré par la base de données, car relier les États à ZipCodes de toute autre manière serait moche. Donc, probablement vos données pour les États < -> Zips < -> Les relations des comtés est dans votre db quelque part.

Vous aurez donc besoin d'avoir procs dans votre db (ou couche intermédiaire LINQ) qui obtient des états par Zips et ainsi de suite. À chaque événement modifié de sélection, renvoyez la nouvelle sélection au sprb db, puis redéfinissez la liste en fonction des données renvoyées. Vous devriez être capable de faire un sproc pour chacun qui renvoie tous les états si aucun zip n'est passé dedans et ainsi de suite. [/ edit]

+0

Oui, j'ai posé cette question, mais j'ai trouvé que ce n'était pas assez descriptif pour la meilleure réponse – Xaisoft

+0

La grande question est, est-ce que votre db a des tables qui unissent les états à ZipCodes? Counties to ZipCodes? Je vais supposer qu'une ville ne peut être que dans un état – jcollum

+0

Comme ci-dessus, j'ai toujours mis les modifications dans leur propre bloc.Si vous avez besoin de supprimer une partie de l'original, mettez-la entre parenthèses: – jcollum

0

Pour clarifier, sur votre chargement initial de la page, vous chargez TOUS les codes postaux, TOUTES les villes, TOUS les états et TOUS les pays?

Cela me semble un peu lourd. C'est le type d'exigence que je mettrais en question. (D'accord, je ne sais pas si vous ne l'avez pas déjà questionné ou si une bonne réponse en est venue).

+0

Bon point, TOUS villes est un sacré tas de records. Demander à l'utilisateur de sélectionner un code postal ou un état en premier peut vraiment améliorer les performances. – jcollum

+0

Bah, faute de frappe. améliorateur = améliorer. – jcollum

+0

Oui, je suis récupéré TOUS les codes postaux, les états, les villes, les comtés. Je ne fais que les utiliser comme exemple, les données que je récupère sont beaucoup plus petites, mais je pense que l'utilisation de codes postaux, d'états, de villes et de comtés serait un meilleur exemple puisque tout le monde sait ce qu'ils sont. – Xaisoft

0

ScriptManager.RegisterStartupScript (Page, Page.GetType(), "bab", "CacheItems();", true);

var ddlTexte, ddlValeur, ddl, lblMesg; function CacheItems() { ddlText = new Array(); ddlValue = new Array(); ddl = document.getElementById (""); pour (var i = 0; i
Questions connexes