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

C# Discussion :

relation entre plusieurs combobox


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut relation entre plusieurs combobox
    Bonjour les amis,

    je suis entrain de dévélopper une application de gestion d'affectation en c#. Dans l'application on doit pouvoir affecter un agent dans un pays, sachant qu'un pays est constitué de villes, et que une ville est constitué d'arrondissement, je voudrais que lorsqu'on selectionne un pays du combobox pays, le combobox ville se rempli des villes de se pays. et lorsqu'on sélection un élément du combobox ville le combobox arrondissement se rempli des arrondissement concernant cette ville.

    merci d'avance pour les propositions

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    - Il faut bien architecturer ta base de données. Tu pourrais avoir les tables suviantes:
    pays (IdPays, NomPays)
    ville(IdVille, NomVille, #IdPays)
    arrondissement(IdArrondissement, NomArrondissement, #IdVille)

    - Ensuite, il te suffira d'intérroger la table ville en spécifiant comme critère l'IdPays pour avoir les villes correspondants à un pays. Idem pour arrondissement. Il faut spécifier IdVille pour avoir les arrondissement liés.
    N'oubliez pas le tag et

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    la réponse est ici

    http://code-helmet.wikidot.com/csharp20

    et sinon, le code donnerait celà :

    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
    53
    54
    55
    56
    57
    58
    59
    60
    private void InitDatabase()
            {
                DataSet dsMain = new DataSet();
     
                DataTable dt1 = new DataTable("Nations");
                dt1.Columns.Add("nCode", typeof(string));
                dt1.Columns.Add("nName", typeof(string));
     
                dt1.Rows.Add(new object[] { "1", "france" });
                dt1.Rows.Add(new object[] { "2", "Italie" });
                dt1.Rows.Add(new object[] { "3", "Espagne" });
                dt1.Rows.Add(new object[] { "4", "Allemagne" });
                dsMain.Tables.Add(dt1);
     
     
     
                DataTable dt2 = new DataTable("States");
                dt2.Columns.Add("sCode", typeof(string));
                dt2.Columns.Add("sName", typeof(string));
                dt2.Columns.Add("sNation", typeof(string));
     
                dt2.Rows.Add(new object[] { "1", "Haute garonne", "1" });
                dt2.Rows.Add(new object[] { "2", "Ariege", "1" });
                dt2.Rows.Add(new object[] { "3", "Paris", "1" });
                dt2.Rows.Add(new object[] { "4", "Rome", "2" });
                dt2.Rows.Add(new object[] { "5", "Naples", "2" });
                dt2.Rows.Add(new object[] { "6", "Madrid", "3" });
                dt2.Rows.Add(new object[] { "7", "Barcelone", "3" });
                dt2.Rows.Add(new object[] { "8", "Munich", "4" });
                dt2.Rows.Add(new object[] { "9", "Baden Baden", "4" });
                dt2.Rows.Add(new object[] { "10", "Ulm", "4" });
     
                dsMain.Tables.Add(dt2);
     
                dsMain.Relations.Add(new DataRelation("Membership", dsMain.Tables["Nations"].Columns["nCode"], dsMain.Tables["States"].Columns["sNation"]));
     
                // Create dummy rows for any parent that has no children
                //foreach (DataRow Row in dt1.Rows)
                //{
                //    if (Row.GetChildRows("Membership").Length == 0)
                //    {
                //        DataRow s = dt2.NewRow();
                //        s["sCode"] = "";
                //        s["sName"] = "";
                //        s["sNation"] = Row["nCode"];
                //        dt2.Rows.Add(s);
                //    }
                //}
     
                dsMain.AcceptChanges();
     
                cboNations.DataSource = dsMain;
                cboNations.ValueMember = "Nations.nCode";
                cboNations.DisplayMember = "Nations.nName";
     
                cboStates.DataSource = dsMain;
                cboStates.ValueMember = "Nations.Membership.sCode";
                cboStates.DisplayMember = "Nations.Membership.sName";
     
            }
    et tu crées 2 combobox cboNations et cboStates dans ta form...
    Dans le Load de ta winform, tu appelles InitDatabase

    et basta
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut relation entre plusieurs combobox
    bonjour,

    pour la structure de la base je l'avais déjà fais comme a indiqué callo. Mon souci se situe au niveau du code, je vais cherché à comprendre la solution proposée par theMonz31 et je vous donne la suite.
    Merci les gars!

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 21
    Points : 19
    Points
    19
    Par défaut relation entre plusieurs combobox
    Bonjour les gars,

    j'ai test la solution que vous m'aviez proposé. Mais j'ai une exception qui m’empêche d'avancer.
    Voici mon code:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Data.Common;
    using System.Text;
    using System.Windows.Forms;
     
     
    namespace TestCode
    {
        public partial class Form1 : Form
        {
            // Objets de connexion aux BD
            Utilitaires.Classes.DbProviderUtilities myDbProviderUtilities = new Utilitaires.Classes.DbProviderUtilities();
            DbConnection MyDbConnection;
            BindingSource MyBindingSource = new BindingSource();
     
            DataSet dsMain = new DataSet();
     
            string mychaine = "";
            string myprovider = "";
     
            public Form1(string mychaine, string myprovider)
            {
                InitializeComponent();
     
     
                this.mychaine = mychaine;
                this.myprovider = myprovider;
     
                cboNations.DataSource = dsMain;
                cboNations.ValueMember = "PAYS.ID_PAYS";    // L'exception c'est a ce niveau "Impossible de créer une liste enfant pour le champ PAYS."[/B]
                cboNations.DisplayMember = "PAYS.LIB_PAYS";  // L'exception c'est a ce niveau "Impossible de créer une liste enfant pour le champ PAYS."[/B]
     
                cboStates.DataSource = dsMain;
                cboStates.ValueMember = "PAYS.Membership.ID_PROV";
                cboStates.DisplayMember = "PAYS.Membership.ID_PAYS";
     
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
               //DataSet dsMain = new DataSet();
                MyDbConnection = myDbProviderUtilities.CreateConnection(myprovider, mychaine);
     
                DataTable dt1 = new DataTable("PAYS");
                dt1.Columns.Add("ID_PAYS", typeof(string));
                dt1.Columns.Add("LIB_PAYS", typeof(string));
                dsMain.Tables.Add(dt1);
     
                DataTable dt2 = new DataTable("PROVINCE");
                dt2.Columns.Add("ID_PROV", typeof(string));
                dt2.Columns.Add("LIB_PROV", typeof(string));
                dt2.Columns.Add("ID_PAYS", typeof(string));
                dsMain.Tables.Add(dt2);
     
     
                dsMain.Relations.Add(new DataRelation("Membership", dsMain.Tables["PAYS"].Columns["ID_PAYS"], dsMain.Tables["PROVINCE"].Columns["ID_PAYS"]));
     
    // Create dummy rows for any parent that has no children
    foreach (DataRow Row in dt1.Rows)
    {
        if (Row.GetChildRows("Membership").Length == 0)
        {
            DataRow s = dt2.NewRow();
            s["ID_PROV"] = "";
            s["LIB_PROV"] = "";
            s["ID_PAYS"] = Row["ID_PAYS"];
            dt2.Rows.Add(s);
        }
    }
     
    dsMain.AcceptChanges();
            }
     
     
        }
    }
    L'exception est ligne 35, 36 "Impossible de créer une liste enfant pour le champ PAYS."

Discussions similaires

  1. Relation entre plusieurs rich:comboBox
    Par ENITIEN dans le forum JSF
    Réponses: 4
    Dernier message: 18/04/2012, 18h24
  2. Relation entre plusieurs rich:comboBox
    Par ENITIEN dans le forum JSF
    Réponses: 1
    Dernier message: 18/04/2012, 16h37
  3. Relation entre plusieurs tables et 1 Formulaire
    Par bibi28 dans le forum Modélisation
    Réponses: 2
    Dernier message: 27/09/2008, 13h56
  4. relation entre plusieurs tables
    Par charlie_p07 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 07/05/2008, 14h34
  5. Relations entre plusieurs tables bloquent un état
    Par aujero dans le forum Access
    Réponses: 5
    Dernier message: 07/02/2006, 12h07

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