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# - ASP.NET Webforms: Récupérer l'index d'un DropDownList généré à partir d'un Select


Sujet :

ASP.NET

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 16
    Par défaut C# - ASP.NET Webforms: Récupérer l'index d'un DropDownList généré à partir d'un Select
    Salut tout le monde !

    Alors voilà, je vous présente mon problème:

    Dans mon projet, j'ai deux tables:

    Personne:
    pers_ID
    pers_nom
    pers_prenom
    pers_serv_ID

    Service:
    serv_ID
    serv_libelle

    Liées par serv_ID = pers_serv_ID

    J'ai une page, de type formulaire, qui permet d'ajouter de nouvelles personnes. Dedans, je demande à l'utilisateur à travers des TextBox de rentrer les différentes informations de la table Personne (nom, prenom). Puis, j'ai une DropDownList qui énumère, juste, les différents libellés Service (SELECT serv_libelle FROM Service). C'est-à-dire que l'utilisateur doit choisir entre le service comptabilité, le service tourisme, etc. par exemple.

    Mon problème:
    Je me suis dis, pour récupérer l'ID de mon DropDownList, je vais faire une fonction SelectedIndexChanged, qui, a chaque fois que l'utilisateur sélectionne un nouveau libellé, le stocke dans une TextBox (à part), que je peux récupérer ensuite lors du clique "Valider".
    Pour être plus clair, je vous met mon code c#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using Projet1;
     
    namespace Projet1
    {
        public partial class AjoutPersonne : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
     
            }
     
            protected void ButtonValider_Click(object sender, EventArgs e)
            {
                SqlConnection MaConnexion = null;
                try
                {
                    MaConnexion = new SqlConnection("Data Source=**\\**;Initial Catalog=**;Integrated Security=True");
                    SqlCommand Ajouter = new SqlCommand("INSERT INTO Personne (pers_ID, pers_nom, pers_prenom, pers_serv_ID) VALUES (DEFAULT, @Nom, @Prenom, @Service);", MaConnexion);
                    MaConnexion.Open();
                    Ajouter.Parameters.Add("@Nom", SqlDbType.NVarChar).Value = TextNom.Text;
                    Ajouter.Parameters.Add("@Prenom", SqlDbType.NVarChar).Value = TextPrenom.Text;
                    Ajouter.Parameters.Add("@Service", SqlDbType.Int).Value = TextEnregistrement.Text;
                    Ajouter.ExecuteNonQuery();
     
                }
                catch (Exception UneException)
                {
                    Erreur.Text = UneException.Message;
                }
                finally
                {
                    if ((MaConnexion != null))
                    {
                        if (MaConnexion.State == ConnectionState.Open)
                        {
                            MaConnexion.Close();
     
                        }
                    }
                }
            }
     
            protected void DropDownListService_SelectedIndexChanged(object sender, EventArgs e)
            {
                TextEnregistrement.Text = DropDownListService.SelectedValue;
            }
     
        }
    }
    Si dans ma dernière méthode, je met SelectedItem ou SelectedIndex, il y a une erreur qui me dit qu'il est impossible de convertir ce type en string (ce que je comprend).
    Mon vrai problème est que:
    • Je pense que je me complique déjà la vie, mais je n'arrive pas à voir d'autres méthodes

    • Quand j'applique cette méthode, il y a une erreur du type:
      Message d'erreur du compilateur: CS1061: 'ASP.ajoutpersonne_aspx' ne contient pas une définition pour 'DropDownListService_SelectedIndexChanged' et aucune méthode d'extension 'DropDownListService_SelectedIndexChanged' acceptant un premier argument de type 'ASP.ajoutpersonne_aspx' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)
      Alors que je réfère bien sur ma DropDownList, l'évènement "SelectedIndexChanged" et je ne pense pas avoir oublié une référence...


    Mon post est un peu long, mais j'ai essayé d'être le plus clair possible dans mes explications, en espérant que vous comprendrez
    Quelqu'un aurait-il une idée?

    Merci de votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Dans tous les cas il n'est pas nécessaire d'enregistrer dans un textbox la valeur de ta dropdownlist. tu l'as récupérera au moment de la validation de ton formulaire. (click event de ton bouton)

    Ceci t’évitera de poster inutilement plusieurs fois ta page. (gain en performance)

    Le problème vient certainement du datasource de ta dropdown. Comment l'as-tu lié...?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 16
    Par défaut
    Salut Dokho1000;

    J'imagine qu'il y a beaucoup plus simple pour récupérer l'ID de ma DropDownList, le problème c'est que je n'ai aucune idée de comment faire...

    Pour mon DataSource, j'ai mis des ** juste pour ne pas que l'on voit mon nom et prénom. Mais je l'utilise à d'autres endroits, notamment dans une page où je récapitule les informations de chaque personne dans un tableau, et cela s'affiche parfaitement, sans problème. Si vraiment tu en as besoin, je peux te le donner, y'a pas de soucis, mais je ne pense pas que le problème vienne de là... Après, peut-être que je me trompe aussi.

    Si jamais tu peux m'expliquer la démarche à prendre pour récupérer le "serv_ID" de ma DropDownLIst qui n'affiche, pour l'utilisateur, que les "serv_libelle"...
    Je te remercie de ton aide en tout cas.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Je ne parle pas du datasource pour ton insert mais de ta dropdownlist...? Comment sont générés les items de ta dropdown ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 16
    Par défaut
    Excuse moi, je n'avais pas compris ça...

    Je génère ma DropdownList à partir de mon code aspx de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <asp:DropDownList ID="DropDownListService" runat="server"
    DataSourceID="ServiceLibelle" DataTextField="serv_libelle"
    AutoPostBack="True">
    </asp:DropDownList>
    Mon DataSourceID="ServiceLibelle" correspond à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <asp:SqlDataSource ID="ServiceLibelle" runat="server"
    ConnectionString="<%$ ConnectionStrings:BDDConnectionString %>"
    SelectCommand="SELECT * FROM [Service]">
    </asp:SqlDataSource>

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Tu as oublié de mettre le DataValueField avec le champs qui correspond à ta clé primaire...(ou autre code unique)

    Petit conseil, évite les SELECT * mais précise les champs que tu voudrais récuperer. Tu verras que c'est bien plus performant.

  7. #7
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    tu ne devrais pas mettre l'AutoPostBack à true (à part si c'est ton event de validation, mais je suppose que tu as un bouton "valider" en sus), ça va retourner côté serveur pour exécuter l'event associé.

    Pour les attributs SelectedXXX d'une DDL :
    SelectedIndex (int) : index de l'élément sélectionné dans ta DDL
    SelectedItem (ListItem) : objet sélectionné (de type key/value)
    SelectedValue (string) : la valeur sélectionnée
    A voir celle qui te convient le mieux.

    Enfin pour ta dernière erreur c'est peut-être un pb de namespace qui varie entre tes différents fichiers.
    Sinon il faudrait plus de code pour trouver.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 16
    Par défaut
    Merci Dokho1000 pour tes conseils, je viens de rectifier tout ça .

    jopopmk, je viens d'enlever l'AutoPostBack (je l'avais mis car sur beaucoup de forum, ils conseillaient de le mettre), car, tu as raison, j'ai un bouton "valider" (merci d'ailleurs pour tes explications) .

    J'ai enlevé ma méthode DropDownListService_SelectedIndexChanged(), pour directement impliquer le code lors du clique du bouton.
    Je vous montre, pour que ce soit plus explicite (ligne12):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    protected void ButtonValider_Click(object sender, EventArgs e)
            {
                SqlConnection MaConnexion = null;
                try
                {
                    MaConnexion = new SqlConnection("Data Source=**\\**;Initial Catalog=**;Integrated Security=True");
                    SqlCommand Ajouter = new SqlCommand("INSERT INTO Personne (pers_ID, pers_nom, pers_prenom, pers_serv_ID) VALUES (DEFAULT, @Nom, @Prenom, @Service);", MaConnexion);
                    MaConnexion.Open();
                    Ajouter.Parameters.Add("@Nom", SqlDbType.NVarChar).Value = TextNom.Text;
                    Ajouter.Parameters.Add("@Prenom", SqlDbType.NVarChar).Value = TextPrenom.Text;
                    Ajouter.Parameters.Add("@Service", SqlDbType.Int).Value = TextEnregistrement.Text;
                    Ajouter.Parameters.Add("@Service", SqlDbType.Int).Value = DropDownListService.SelectedValue;
                    Ajouter.ExecuteNonQuery();
     
                }
    Avec bien sûr le reste du code que j'ai mis dans le premier post.

    Et grâce à vous, mon problème est résolu . Je vous remercie d'avoir pris le temps de m'aider en tout cas! Et de m'expliquer les problèmes, ça faisait quelques jours que j'y penchais et ça fait du bien d'enfin y arriver, avec votre aide.

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

Discussions similaires

  1. [ASP.NET/C#] Récupérer session côté serveur
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 5
    Dernier message: 27/02/2007, 16h03
  2. Réponses: 6
    Dernier message: 02/12/2006, 20h51
  3. [vb.net][dataview] récupérer l'index des items filtrés ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 26/01/2006, 15h55

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