none
Problème récupération données venant de 2 tables. RRS feed

  • Question

  • Bonjour ,

    J'effectue un programme en WindForm , et j'aimerai récupérer dans une combobox la liste des villes présentes dans ma base de données. Ensuite que le code postal associé à la ville sélectionné se mette directement dans un label juste à côté. 

    Mes villes se trouvent dans une table 'localité' ayant une clé étrangère 'idCp' correspondant à la clé primaire de ma table codepostal.

    En espérant que ma question est suffisamment claire.

    jeudi 10 mai 2012 13:33

Réponses

  • Ou si vous préférez vous pouvez aussi déclencher une requête dans le SelectedIndexChanged pour aller chercher le code postal correspondant et l'afficher... Je crois comprendre maintenant que c'est peut-être bien cette approche que vous cherchiez à faire dans ce cas en partant de vote code :

    - changer la requête pour récupérer le code postal
    - et donc le code postal récupéré serait utilisé pour modifier un contrôle label plutôt que la liste que l'on vient de modifier

    Le code que vous montrez m'avait pertubé car on semble faire une requête pour au final modifier la liste déroulante avec un nom que l'on a déjà (on fait une requête sur nom=Text et on modifie Text avec le nom que l'on a trouvé donc on ne doit pas changer grand chose et ce n'est pas cela qui définit ce qui est affiché par la liste déroulante contrairement à ce que vous semblez indiquer).

    Accessoirement pour la requête l'id serait préférable (on peut avoir 2 villes de même nom avec des codes postaux différents) mais occupez vous déjà d'avoir qq chose de bon à 99% avant de voir ce détail.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 11 mai 2012 09:21

Toutes les réponses

  • Bonjour,

    La question étant posée dans Linq et EF, il serait possible de créer une requête LINQ qui retourne une liste des localités avec l'ID, le code postal et et le libellé ce qui permet d'utiliser ces objets pour la liste déroulante. Ensuite, il suffit de gérer le SelectedIndex pour récupérer le code postal correspondant à l'objet sélectionné et l'afficher.

    Ou sinon, on relance une requête séparée quand on a sélectionné la localité... La question est claire mais comme plusieurs approches sont possibles...

    Si éventuellement vous avez déjà essayé qq chose cela peut-être utile de l'indiquer ce qui permettrait de continuer sur la lancée de votre approche actuelle...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 10 mai 2012 14:26
  • Alors pour l'instant j'arrive à introduire dans la combobox la liste des villes ... comme ceci ...

    private void comboVille_SelectedValueChanged(object sender, EventArgs e)
            {
                if (comboVille.Text == "--")
                {
                    return;
                }
                mydbEntities db = new mydbEntities();
                var liste = (from localite
                             in db.localite
                             where localite.nom == this.comboVille.Text
                             select localite).FirstOrDefault();

                    comboVille.Text = liste.nom;
            }
    jeudi 10 mai 2012 15:34
  • Pas sûr de comprendre. On change le Text de la combo que l'on vient de maniper ? Je pensais par exemple à qq chose comme :

                comboBox1.DisplayMember = "Localité";
                comboBox1.ValueMember="LocaliteId";
                comboBox1.DataSource = (from l in mc.Localite
                                       select new Data()
                                       {
                                               LocaliteId = l.LocaliteId,
                                               Localité = l.Nom,
                                               CodePostal = l.CodePostal.Code
                                       }).ToList();

    dans le Form_Load pour charger la combo.

    Et qq chose comme :

            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                label1.Text = ((Data)comboBox1.SelectedItem).CodePostal;
            }
    pour modifier le libellé réservé au code postal de la ville sélectionnée. Data est une classe avec 3 propriétés destinées à fournir un type qui stocke les triplets (id de la ville, nom de la ville, code postal de la ville).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    jeudi 10 mai 2012 16:51
  • En gros je voudrais reprendre le principe que l'on retrouve dans certain formulaire à savoir que l'on a dans une combo-box une liste de villes et juste à coté afficher le code postal qui lui correspond. Dans l'exemple que vous avez fourni plus haut je dois donc créer une classe Data.cs avec un constructeur qui reprend en argument l'id de la ville , son nom et son code postal donc ?
    jeudi 10 mai 2012 19:37
  • Ou si vous préférez vous pouvez aussi déclencher une requête dans le SelectedIndexChanged pour aller chercher le code postal correspondant et l'afficher... Je crois comprendre maintenant que c'est peut-être bien cette approche que vous cherchiez à faire dans ce cas en partant de vote code :

    - changer la requête pour récupérer le code postal
    - et donc le code postal récupéré serait utilisé pour modifier un contrôle label plutôt que la liste que l'on vient de modifier

    Le code que vous montrez m'avait pertubé car on semble faire une requête pour au final modifier la liste déroulante avec un nom que l'on a déjà (on fait une requête sur nom=Text et on modifie Text avec le nom que l'on a trouvé donc on ne doit pas changer grand chose et ce n'est pas cela qui définit ce qui est affiché par la liste déroulante contrairement à ce que vous semblez indiquer).

    Accessoirement pour la requête l'id serait préférable (on peut avoir 2 villes de même nom avec des codes postaux différents) mais occupez vous déjà d'avoir qq chose de bon à 99% avant de voir ce détail.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 11 mai 2012 09:21
  • Merci de la réponse !

    Bien à vous .

    lundi 14 mai 2012 10:19