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

Windows Forms Discussion :

Problème pour remplir un DataGridViewComboBox


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Par défaut Problème pour remplir un DataGridViewComboBox
    Bonjour
    Donc je vous explique mon problème.
    J'ai un DataGridView avec plusieurs colonnes dont deux etant des DataGridViewComboBox. Ce que je voudrais c'est, en fonction de ce qui est selectionné dans la premiere liste, actualisé les données de la seconde.

    Par exemple dans la première liste je met une liste de pays et enfonction de celui qui est selectionné une requete est effectuée pour n'afficher que les villes de ce pays contenues dans ma base de données.

    Pour remplir la première liste pas de soucis les données ne changent jamais, j'utilise donc la propriété DataSource. Mais pour la seconde liste la source peut changer a chaque ligne de mon DataGridView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List1.ValueMember="ID";
    List1.DiplayMember="Name";
    List1.DataSource=GetPays()
    //GetPays renvoie une liste d'objet {ID, Name}
    Existe t il un moyen de faire ca simplement, dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List2(indexrow).DataSource=GetVille(IDPays)
    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    J'ai le même soucis ... j'ai l'impression que le datasource du combobox est celui de toutes les lignes et qu'on ne peut pas le changer seulement pour une ligne... Si quelqu'un a une solution ca serait cool
    A+

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Par défaut
    En même temps c'est logique étant donnée que DataSource est une propriété de la colonne. Donc toute les lignes sont affectées.

    Mais n'existerait il pas une possibilité pour pouvoir modifier ligne par ligne les items contenues dans les combobox?

  4. #4
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Si ta liste n'est pas liée à une source de données, tu peux modifier dynamiquement ses éléments.

    Sinon j'ai peut-être une astuce à te proposer : Pourquoi ne tu ne crées pas une méthode GetMesDonnees qui te renvoie une seule liste correcte à afficher dans ta DataGridViewComboBox plutôt que d'essayer de changer de DataSource ?

    Par exemple, je vois que tu as une liste de pays :

    GetPays() -->

    France
    Espagne
    Angleterre


    Et une liste de villes par pays :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GetVille("France") -->
     
    Paris
    Marseille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GetVille("Espagne") -->
     
    Madrid
    Barcelone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GetVille("Angleterre") -->
     
    Londres
    Bristol
    Pourquoi ne pas créer une méthode qui te renvoie directement une liste à afficher dans ta grille (mélangeant villes et pays) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GetDonnees(... A toi de voir les paramètres à passer ...) -->
     
    France
    Paris
    Marseille
    Espagne
    Madrid
    Barcelone
    Angleterre
    Londres
    Bristol
    Puis tu lies cette liste à ta DataGridViewComboBox comme tu sais le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List2.DataSource=GetDonnees(...)
    Non ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Par défaut
    En gros tu voudrais que j'ai qu'une seule combo au lieu de 2?
    J'avoue pas avoir tous compris

    Sinon je viens juste de trouver une solution pour modifier les combo de chaque ligne (après plus de un jour a chercher )
    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
     
            private void GridFormat_CellValueChange(object sender, DataGridViewCellEventArgs e)
            {
                //On verifie que la methode est appelé par le changement de Pays
                if (GridFormat.Columns[e.ColumnIndex].Name == "LDPays")
                {
                    int IDPays;
                    IDPays = int.Parse(GridFormat.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
     
                    //En fonction du choix du pays on actualise les villes
                    DataGridViewComboBoxCell cbo = (DataGridViewComboBoxCell)GridFormat.Rows[e.RowIndex].Cells["LDVille"];
     
                    cbo.DataSource = GetVille(Pays);
                }
            }
    Ça va bien sauf lorsque des données existent et que je veux modifier le pays. Je pense que ça vient du fait qu'une ville est sélectionnée. Sachant que la propriété SelectedIndex n'existe pas avec les DataGridViewComboBox, existe t il la possibilité de mettre l'index à -1 autrement?

  6. #6
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Par défaut
    Bon j'ai finalement réussi a mettre a jour ma deuxième liste sans message d'erreur lorsqu'une valeur était déjà présente.
    C'est très vilain je sais mais j'ai déjà passé assez de temps sur ce problème.
    Si vous avez mieux je suis preneur
    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
     
    private void GridFormat_CellValueChange(object sender, DataGridViewCellEventArgs e)
            {
                if (GridFormat.Columns[e.ColumnIndex].Name == "LDPays")
                {
                    int IDPays;
                    IDPays = int.Parse(GridFormat.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
     
                    //En fonction du choix ddu pays on reduit le nombre de ville à choisir
                    DataGridViewComboBoxCell cbo = (DataGridViewComboBoxCell)GridFormat.Rows[e.RowIndex].Cells["LDVille"];
     
                    IList<Ville> ListeTemporaire=new List<Ville>();
                    ListeTemporaire = GetVille(Pays);
                    cbo.DataSource = GetVille();
                    if (ListeTemporaire.Count>0)
                        cbo.Value=ListeTemporaire[0].Id;
     
                    cbo.DataSource = ListeTemporaire;
     
                }
            }
    En espérant que ça pourra aider certain

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/05/2007, 11h48
  2. [VBA-E] Problème pour remplir une listbox multicolonne
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2007, 16h55
  3. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  4. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  5. [MFC] Problèmes pour remplir unecombobox
    Par tealc5 dans le forum MFC
    Réponses: 7
    Dernier message: 01/01/2006, 17h35

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