IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

ListBox et DropDownList


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Par défaut ListBox et DropDownList
    Bonjour.
    Dans le fichier .aspx, je dispose d'une zone de liste (ListBox) et d'une liste déroulante (DropDownList).
    La zone de liste contient 6 éléments (ListItem).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <asp:ListBox ID="ListBoxOne" runat="server" AutoPostBack="True" onselectedindexchanged="ListBoxOne_SelectedIndexChanged">
    <asp:ListItem>A</asp:ListItem>
    <asp:ListItem>B</asp:ListItem>
    <asp:ListItem>C</asp:ListItem>
    <asp:ListItem>D</asp:ListItem>
    <asp:ListItem>E</asp:ListItem>
    <asp:ListItem>F</asp:ListItem>
    </asp:ListBox>
    La liste déroulante contient 36 éléments (ListItem).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <asp:DropDownList ID="DropDownListOne" runat="server" onselectedindexchanged="DropDownListOne_SelectedIndexChanged">
    <asp:ListItem>1</asp:ListItem>
    <asp:ListItem>2</asp:ListItem>
    <asp:ListItem>3</asp:ListItem>
    	Etc...
    <asp:ListItem>34</asp:ListItem>
    <asp:ListItem>35</asp:ListItem>
    <asp:ListItem>36</asp:ListItem>
    </asp:DropDownList>
    Lorsqu'on clique sur un des 6 éléments (A, B, C, D, E ou F) de la zone de liste, la liste déroulante ne doit afficher que certains éléments parmi les 36 disponibles.
    Par exemple, si on clique sur l'élément C de la zone de liste, alors seuls les éléments 8,9,11 et 12 de la liste déroulante seront affichés. Si on clique par exemple sur l'élément E de la zone de liste, alors seuls les éléments 21,25,27,28,29 et 30 de la liste déroulante seront affichés.
    Comment faire pour que cela soit possible dans le fichier .cs au niveau de la méthode suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected void ListBoxOne_SelectedIndexChanged(object sender, EventArgs e)
    {
    }
    Je vous remercie.

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    La source de données que tu lies à tes listes doit être filtrée en fonction de l'élément sélectionné dans ListBoxOne.

    Disons que la source de données "MyData" est une liste de clefs/valeurs comme ceci:
    1-A
    2-A
    3-B
    4-C
    Dans la méthode "ListBoxOne_SelectedIndexChanged" le sender est la liste déroulante. Tu fais un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DropDownListOne.Datasource = MyData.Where(x => x.Value == (sender as ListBox).SelectedItem.Value);
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Par défaut
    Merci.
    Cependant, la clause Where de MyData (SqlDataSourceTest) n'existe pas.
    La ligne suivante ne fonctionne pas à partir de Where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DropDownListOne.Datasource = SqlDataSourceTest.Where
    Est-ce normal ?

  4. #4
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Hello,

    C'est du LINQ. Il faut rajouter le bon using
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut
    Et voilà tu as les clauses linq dispo sur tes listes


    Un autre moyen été d'avoir par ex :
    Class A (listbox) : libelle et propriété ListeB du type B (dropdownlist) et dans listB tu as les éléments possibles pour celui ci.

    et dans ton selection Changed tu pointes l'itemsSource du dropdowlist sur ListeB du selecteditem.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Par défaut
    Je vous remercie.
    Mais pour pouvoir utiliser LinqDataSource, je dois être dans un projet Site Web et non dans un projet Application Web ?

  7. #7
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Cela n'a rien á voir.

    LINQ est une technologie Microsoft, il suffit de faire un using.Linq;
    A moins peut etre que ton framework .net est trop ancien

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut
    Tu n'as qu'à voir Linq comme une bibliothèque de fonction d'extension.

    Comme si par exemple tu devais faire un import de String2 qui contiendrait les méthodes Lengh Count Contains etc.
    Ces fonctions n'auraient rien à voir avec la classe String mais permettent de faire des traitements facilement sans avoir à tout réécrire à la main.

    Linq est pareil dans un sens. Sauf que Linq est beaucoup plus gros que cet exemple.

    Exemple d'une requête Linq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // requête qui ressemble à la syntaxe de SQL :
    var liste = From obj in listeDataFromWebService
    Select New { Blabla = obj.PatatiPatata }
    autre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var liste =listeDataFromWebService.Where((obj) => { !string.isnullorempty(obj.PatatiPatata )})
    var premierElement = liste.FirstOrDefault();

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Par défaut
    J'ai bien ajouté la ligne suivante :
    Cependant, la clause Where n'apparait seulement que si ma DataSource est une LinqDataSource. Si j'utilise une DataSource de type SqlDataSource, la clause Where n'apparait plus (même avec la ligne using System.Linq).
    Donc pour utiliser LINQ, faut-il obligatoirement utiliser une DataSource de type LinqDataSource ?
    Je vous remercie.

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 436
    Par défaut
    Alors je n'ai pas l'info exacte mais pour moi, tout ce qui est IEnumerable peut utiliser des extensions Linq.

    LinqDataSource

    J'ai pas fait des masses d'asp.net, mais si tu veux faire ta clause where à la main, il te faudra passer par code behind, récupérer ta source de données, faire en gros un tolist().Where(...) et définir cette nouvelle liste comme source de données de ton composant si c'est possible.

  11. #11
    Expert confirmé

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Par défaut
    Je confirme que LINQ s'applique à tout ce qui hérite d'IEnumerable.

    Un simple .ToList() devrait donc suffire
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Par défaut
    Je vous remercie pour vos réponses.
    Ainsi, il faut appliquer .ToList() (pour que cela devienne IEnumerable) à la source de données.
    Mais comment faire pour appliquer un .ToList() à une SqlDataSource ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2011, 08h53
  2. remplir un listBox à partir d'un dropdownList
    Par prince_antonio dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/03/2008, 22h36
  3. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  4. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  5. Copier le texte d'un ListBox dans le clipboard.
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/08/2002, 08h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo