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 :

C# - remplir une DropDownList via une List<classe> OK mais comment l'extraire après sélection ?


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Points : 33
    Points
    33
    Par défaut C# - remplir une DropDownList via une List<classe> OK mais comment l'extraire après sélection ?
    Bonjour,

    Prenons l'exemple d'une table client avec cli_id (clé), cli_nom, cli_pre...

    Je veux afficher mes clients dans une DropDownList et récupérer les infos après sélection.

    Je connais des techniques pour initialiser une DropDownList et récupérer sa valeur (cli_id) après sélection, sauf que j'ai besoin de récupérer les autres infos de mon client et je refais une requête SELECT avec mon info cli_id. Tout ceci afin d'avoir mon objet de type CLIENT au complet.

    J'ai vu un moyen d'initialiser mon DropDownList en affectant une méthode qui renvoie une List<Client>.

    Donc pour le chargement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    liste.DataSource = blabla.Instance.getListeClients();
    liste.DataValueField = "cli_id";
    liste.DataTextField = "cli_nom";
    liste.DataBind();
    ça c'est ok, par contre ma question :

    Comment fait-on si je veux récupérer ma sélection sous forme d'objet de type Client?

    liste.SelectedItem.Text et liste.SelectedItem.Value renvoie que 2 valeurs mais j'ai besoin du reste. Il doit bien avoir tout le contenu de List<Client> ?

    Merci pour vos réponses

    ps : je ne souhaite pas utiliser de composant ODS...

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Dans une DropDownList, les objets sont de type ListItem. Impossible donc d'y faire transiter un objet complet, à moins de sérialiser l'objet, et de passer le code XML en tant que Value par exemple. Mais bon, je ne vois pas trop l'intérêt de faire ça.

    Dans un cas classique, une fois la ligne sélectionnée, il faut récupérer l'ID via la SelectedValue, puis récupérer l'objet correspondant dans la source de données.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    bonjour,

    j'ai compris qu'à moitié la réponse :

    - donc malgré qu'on initialise la DDL avec une liste d'objet. Le listitem ne peut retourner que le texte et la valeur. c'est bien ça

    - la solution : "récupérer l'objet correspondant dans la source de données."
    tu veux dire quoi? Il faut que je fasse une requête sql pour récupérer le reste? Ou bien je peux réexploiter "DataSource"?

    Je ne comprends pas ta solution?

    cdt

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par arnovodao
    - donc malgré qu'on initialise la DDL avec une liste d'objet. Le listitem ne peut retourner que le texte et la valeur. c'est bien ça
    Exactement. Comme je l'ai mentionné, tu peux aussi mettre du XML dans la valeur, donc tu peux y mettre des données serialisées. Ensuit tu récupères la valeur et tu dé-serialises. Mais bon c'est lourd... Je trouve ça plutôt crade. L'usage veut que la valeur serve en général à stocker un ID.

    Citation Envoyé par arnovodao
    tu veux dire quoi? Il faut que je fasse une requête sql pour récupérer le reste? Ou bien je peux réexploiter "DataSource"?
    Tout dépend de ton application. Dans certains cas tu peux réutiliser ta DataSource, dans d'autres tu préfèreras aller requêter en DB directement, pour être sûr de travailler sur la dernière version par exemple...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    j'ai pris comme exemple "client" mais en faite mes DDL sont des données de références comme (Madame/monsieur...)

    Jusqu'à maintenant, j'initialise ma DDL avec une requête sql. Dans le cas d'un action je voulais éviter de retourner en base pour recompléter la même info.

    S'il n'y a pas le choix je ne suis pas à une requête sql prêt.
    L'idée du xml : pas interessé
    Exploiter le datasource c'est une piste mais je ne sais pas le manipuler.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Ca dépend de ce que tu veux faire avec ta drop down list Donne-nous un scénario concret et tu auras une réponse plus concrète !

    Là je me fie à ce que tu as donné dans ton premier message (get list clients). Si tu arrives à définir un peu plus explicitement ce que tu veux faire, on pourra te donner des informations plus adaptées.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    ça peut me servir dans plusieurs situations

    Concrètement, j'ai une table CLIENTS avec x champs dont la clé primaire "cli_id".

    J'ai une classe Client avec autant de champs

    j'injecte dans une combo une liste de clients avec List<Client>

    Quand je sélectionne client et que j'appuie sur un bouton, j'aimerais récupérer le résultat sous le type "Client" et au complet. Et si possible sans passe par du sql.

    On met bien une liste classe complète dans la combo car on sélectionne après les champs qiu font value et text.
    Donc je suppose qu'on peut récupérer l'info au complet.

    Que manque t-il dans ma demande pour qu'elle soit complète?

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par arnovodao
    j'injecte dans une combo une liste de clients avec List<Client>
    Certes, mais dans ta combo tu remplis en fait une List<ListItem>. Voici la structure d'un objet ListItem : http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem.value.aspx.

    Ta DropDownList est donc peuplée par un objet de type List<ListItem>. Donc tu n'es plus du tout en présence de ton objet initial Client.

    Citation Envoyé par arnovodao
    Quand je sélectionne client et que j'appuie sur un bouton, j'aimerais récupérer le résultat sous le type "Client" et au complet. Et si possible sans passe par du sql.
    Si tu as l'ID dans ta value, tu as plusieurs options :
    - Soit tu refais une requête SQL pour récupérer l'enregistrement correspondant à l'ID sélectionné dans la dropdownlist (il n'y a aucun mal à ça ...).
    - Soit tu as mis en cache au préalable ta List<Client>, et tu la réutilises pour récupérer les infos dont tu as besoin. Attention ça peut être risqué, car si quelqu'un a modifié un enregistrement en base entre temps, ta liste en cache ne sera pas à jour.

    Donc la reco, c'est de faire une requête pour récupérer l'enregistrement demandé par l'utilisateur

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Merci pour la réponse donc je referai une requête sql après traitement pour récupérer le reste de l'info.

    résolu

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2009
    Messages : 133
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par arnovodao Voir le message
    ça peut me servir dans plusieurs situations

    Concrètement, j'ai une table CLIENTS avec x champs dont la clé primaire "cli_id".

    J'ai une classe Client avec autant de champs

    j'injecte dans une combo une liste de clients avec List<Client>

    Quand je sélectionne client et que j'appuie sur un bouton, j'aimerais récupérer le résultat sous le type "Client" et au complet. Et si possible sans passe par du sql.

    On met bien une liste classe complète dans la combo car on sélectionne après les champs qiu font value et text.
    Donc je suppose qu'on peut récupérer l'info au complet.

    Que manque t-il dans ma demande pour qu'elle soit complète?
    Bonjour arnovodao,
    Si tu tiens absolument à réutiliser ta List<Client>, tu peux !
    Tu créés une variable globale que tu initialises donc dans ton page_Load
    quelque par tu as effectué un Binding avec ta Combox qui va te renvoyer UNIQUEMENT le "cli_id"... normal ListItem oblige !
    Avec cela tu fais un list1.Find(a=>a.cli_id==tonIdRecupere) et tu obtiens un objet complet avec toutes les autres propriétés que tu peux donc manipuler à ta guise.
    Sinon c'est Matt07 qui a raison. Pour faire plus propre, avec ton cli_id tu vas requêter ta base !
    En espérant t'avoir aidé.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    bonjour,

    j'ai lu avec attention ta réponse.

    depuis ce temps là j'ai opté pour la solution de faire propre à savoir faire une requête sql pour tout récupérer et j'ai compris que le ddl se limite à une valeur + texte

    Je garde de côté ton utilisation de find()

    merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Récupérer une valeur d'une combobox via une SortedList
    Par smurfing dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/03/2013, 14h32
  2. Ajouter une colonne dans une table via une requête
    Par Alien_psy dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 23/02/2013, 06h24
  3. Modifier le style d'une page dans une frame via une autre frame
    Par Menontona dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/12/2011, 19h54
  4. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 12h58
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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