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 :

Problème de récupération d'indice dans une listbox


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut Problème de récupération d'indice dans une listbox
    Bonjour j'ai une page qui contient une listeBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:DropDownList ID="typ" name="typ" runat="server" ></asp:DropDownList>
    Que je remplis grâce à une base de donnée au chargement de la page.

    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
    //Création de la connexion
                    conn = Connection.getConnectionGetteur();
                    //Ouverture de la connection
                    conn.Open();
                    //Sert à avoir le nombre de ligne de la requête
                    cmdType = new SqlCommand(null, conn);
                    cmdType.CommandText = "SELECT * FROM TYPEP ";
                    readType = cmdType.ExecuteReader();
                    typ.Items.Clear();
                    while (readType.Read())
                    {
                        string libelle = (string)readType.GetSqlString(1);
                        Guid id = readType.GetGuid(0);
                        typ.Items.Add(libelle);
                        idType.Add(id);
                    }
    Je remplis donc la listebox avec le libellé et dans le même temps je remplis une list qui contient les id des libellé.

    Quand tous les champs sont validé, on clique sur le bouton enregistré. Qui exécute une action d'on une requête sql

    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
    //Création de la connexion
                    conn = Connection.getConnectionSetteur();
                    //Ouverture de la connection
                    conn.Open();
                    //Insertion du nouveau bien
     
     
                    //Requête préparer qui empeche l'injection
                    insert = new SqlCommand(null, conn);
                    insert.CommandText = "INSERT DEMANDE (codeDemande, villeRecherche, surfaceMin, surfaceMax, prixMin, prixMax, idIntervenant, idType, codePostalRecherche) " +
                                         "values (NEWID(), @villeRecherche, @surfaceMin, @surfaceMax, @prixMin, @prixMax, @idIntervenant, @idType, @codePostalRecherche)";
     
                    SqlParameter villeRecherche = new SqlParameter("@villeRecherche", SqlDbType.Text, 20);
                    villeRecherche.Value = this.ville.Text;
                    SqlParameter codePostalRecherche = new SqlParameter("@codePostalRecherche", SqlDbType.Text, 5);
                    codePostalRecherche.Value = this.cp.Text;
                    SqlParameter surfaceMin = new SqlParameter("@surfaceMin", SqlDbType.Int);
                    surfaceMin.Value = this.surfaceMin.Text;
                    SqlParameter surfaceMax = new SqlParameter("@surfaceMax", SqlDbType.Int);
                    surfaceMax.Value = this.surfaceMax.Text;
                    SqlParameter prixMin = new SqlParameter("@prixMin", SqlDbType.Int);
                    prixMin.Value = this.prixMin.Text;
                    SqlParameter prixMax = new SqlParameter("@prixMax", SqlDbType.Int);
                    prixMax.Value = this.prixMax.Text;
                    SqlParameter idIntervenant = new SqlParameter("@idIntervenant", SqlDbType.UniqueIdentifier);
                    idIntervenant.Value = Session["idLogin"];
                    SqlParameter idTYPEP = new SqlParameter("@idType", SqlDbType.UniqueIdentifier);
                    idTYPEP.Value = this.idType[indexType];
     
     
                    insert.Parameters.Add(villeRecherche);
                    insert.Parameters.Add(surfaceMin);
                    insert.Parameters.Add(surfaceMax);
                    insert.Parameters.Add(prixMin);
                    insert.Parameters.Add(prixMax);
                    insert.Parameters.Add(idIntervenant);
                    insert.Parameters.Add(idTYPEP);
                    insert.Parameters.Add(codePostalRecherche);
                    insert.ExecuteNonQuery();
    Tous ça marche, mais pas comme il faut. En effet pour récupéré l'id je me sert de l'indice que me renvoie this.typ.SelectedIndex
    Soit l'indice de la valeur sélectionner dans la liste box.

    Mais en inspectant ma base, je me suis rendu compte que l'id enregistré était toujours le même. Le premier.

    En faisant un débugage, je me suis rendu compte aussi que quand je clique sur le bouton. Il rechargeais d'abord la page. Puis exécuter le code du bouton.

    Parce que mes valeur ne sont pas réinitialisé dans mes textbox ça ne pose pas trop de problème. Sauf que la listebox elle est rechargé et reprend ça valeur par défaut. Je me retrouve donc toujours avec la première valeur de sélectionner.

    Je ne trouve pas de solution à mon problème, je ne voie même pas pourquoi le onload se fait avant le click du bouton.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Problème typique de tout débutant qui a du mal à saisir les subtilités du post back

    Regarde du côté de Page.IsPostBack

  3. #3
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Merci maitre jedi, alors oui en effet je ne passe plus par le onload, mais pour une obscure raison cela me lève un exception

    sur cette ligne
    idTYPEP.Value = this.idType[indexType]; (la 28)
    En effet quand je clique ma liste se retrouve à null. C'est la seul variable qui passe à null une idée d'erreur typique que j’ai pu commettre encore ?

    Sachant que je ne l'instancie que dans le IsPostBack et nul par d'autre.

    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
    if (!IsPostBack)
                {
                    // Validate initially to force asterisks
                    // to appear before the first roundtrip.
                    Validate();
     
                    idType = new List<Guid>();
     
                    if (Session["Login"] == null)
                    {
                        Server.Transfer("Login.aspx", true);
                    }
                    else
                    {
                        erreurLog.Text = "Bienvenue " + Session["Login"].ToString();
                    }
     
                    try
                    {
                        //Création de la connexion
                        conn = Connection.getConnectionGetteur();
                        //Ouverture de la connection
                        conn.Open();
                        //Sert à avoir le nombre de ligne de la requête
                        cmdType = new SqlCommand(null, conn);
                        cmdType.CommandText = "SELECT * FROM TYPEP ";
                        readType = cmdType.ExecuteReader();
                        typ.Items.Clear();
                        while (readType.Read())
                        {
                            string libelle = (string)readType.GetSqlString(1);
                            Guid id = readType.GetGuid(0);
                            typ.Items.Add(libelle);
                            idType.Add(id);
                        }
                    }
                    catch (Exception ex)
                    {
     
                    }
                    finally
                    {
                        //Fermeture de la connexion et du datareader
                        if (readType != null)
                        {
                            readType.Close();
                        }
                        conn.Close();
                    }
                }
     
            }
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Je comprends pas tout à ton code...
    Elle sert à quoi ta liste idType?

    Puis c'est quoi le message d'erreur exact?

  5. #5
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    La liste idType contient les guid propre à chaque libellé, dans le même ordre.

    Quand je remplis la listbox la liste idType est remplis en parallèle, comme ça selon le libellé sélectionné et son indice je peux retrouver l'id correspondant

    Le message d'erreur est un nullPointerExpection, car en effet ma liste idType perd toute ses info quand je clique sur le bouton.

    Bizarrement j'ai une autre variable de type int qui garde sa valeur quand j'appuie sur le bouton
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    La liste idType contient les guid propre à chaque libellé, dans le même ordre.

    Quand je remplis la listbox la liste idType est remplis en parallèle, comme ça selon le libellé sélectionné et son indice je peux retrouver l'id correspondant
    Ca sert à rien, le guid tu l'as dans le SelectedItem

    Un truc dans le genre:

    idTYPEP.Value = typ.SelectedValue

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    La liste idType contient les guid propre à chaque libellé, dans le même ordre.

    Quand je remplis la listbox la liste idType est remplis en parallèle, comme ça selon le libellé sélectionné et son indice je peux retrouver l'id correspondant

    Le message d'erreur est un nullPointerExpection, car en effet ma liste idType perd toute ses info quand je clique sur le bouton.

    Bizarrement j'ai une autre variable de type int qui garde sa valeur quand j'appuie sur le bouton
    Tu peux mettre ta liste en session la première fois que tu la rempli, puis ensuite tu la réutilises
    Session["laListe"] = idType;

    idType = (List<Guid>)Session["laListe"] ;

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

Discussions similaires

  1. Problème de formatage de nombre dans une listbox
    Par Jean-Marc68 dans le forum C#
    Réponses: 3
    Dernier message: 29/11/2007, 19h01
  2. Problème de récupération de champs dans une DW
    Par SandraG dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 27/11/2007, 12h08
  3. Réponses: 2
    Dernier message: 21/09/2007, 11h37
  4. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  5. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 19h07

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