ComboBox DataGridView [Résolu]

cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 25 août 2006 à 09:19 - Dernière réponse : cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention
- 25 août 2006 à 12:40
Bonjour a tous.
Bon c'est encore moi !
Je suis sur un passage difficile la, j'y arrive pas. J'espere que qqun pourra m'aider.

J'ai une listBox contenant une liste d'utilisateurs.
Je veux faire un dataGridView comportant une seule colonne composee de cellule de type comboBox contenant une liste d'entreprise (un arrayList)
Lorsque je clique sur un utilisateur dans ma liste, le tableau doit se charger avec les entreprises associees a l'utilisateur designe (encore un arrayList).

Voila le code de ce que j'ai fais :

// Constructeur de la classe derivee de DataGridView
// Le formatage du dataGridView est fait dans la classe mere de SuitGroup
public SuitGroup()
        {
            m_cmbColumn = CreateNamedComboBoxColumn("lblCoName");
            Columns.Add(m_cmbColumn);
        }

// Fonction qui me permet de creer une colonne de comboBox
private DataGridViewComboBoxColumn CreateNamedComboBoxColumn(String colName)
        {
            DataGridViewComboBoxColumn column =
                new DataGridViewComboBoxColumn();
            column.Name = LanguageContext.currentLC.AppControls[colName];
            return column;
        }

// Fonction appelee dans mon pg principal et que me permet de charger le tableau.
// Vide si on n'a pas encore clique sur un utilisateur (base.Datas = null dans ce cas)
// Plein si on a clique sur un utilisateur
public override void Load()
        {
            // Clear the old data
            Rows.Clear();

            // If the new list is not empty
            if (base.Datas != null)
            {
                // Ajout du nombre de ligne necessaire dans le tableau              
                Rows.Add(Datas.Count);

                // i : indice de la ligne courante
                int i=0;
                // Pour chaque element de la liste d'entreprises associees a l'utilisateur designe
                foreach (Company coCurrent in base.Datas)
                {
                    DataGridViewComboBoxCell cellCur =                                                                                                         (DataGridViewComboBoxCell)(Rows[i].Cells[m_cmbColumn.Name]);
                     // On charge un object de type "entreprise"
                    cellCur.Value = coCurrent;
                    i++;
                }
            }
        }

Voila en gros. Mais le  "cellCur.Value" me jete tout le temps sans raison comprehensible.
"entreprise" est bien sur derive d'Object. De toute facon, j'ai essaye aussi avec un String, ca passe avec une chaine vide mais pas avec une autre chaine !!!!

Je ne trouve pas comment afficher qqch dans mes combo. Il n'y a pas de propriete "Text", "SelectedText", "SelectedIndex" ou autre comme pour une combo classique. Je n'ai trouve que "value" !

Si qqun voit le probleme, merci pour l'aide qu'il pourrait m'apporter parce que la franchement je vois plus !!!
Si j'ai mal explique mon pb ou mon code, n'hesitez pas a demander des precisions.

BYE BYE
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 25 août 2006 à 12:40
3
Merci
Bon j'ai un pote qui a trouve ! Je donne la solution pour ceux qui seraient interesses :

// ca c'est pour charger la liste dans les combos
m_grdCompList.ComboColumn.DataSource = Company.GetList();

// La fonction Load( ) devient ceci :
// Elle permet d'afficher pour chaque ligne l'entreprise voulu en la selectionnant ds la combo
public override void Load()
        {
            // Clear the old data
            Rows.Clear();

            // If the new list is not empty
            if (base.Datas != null)
            {
                // Adds the data in the DataGrid row by row.
                int i=0;
                Rows.Add(Datas.Count);
                foreach (Company coCurrent in base.Datas)
                {
                    DataGridViewComboBoxCell celCur =
                        (DataGridViewComboBoxCell)(Rows[i].Cells[m_cmbColumn.Name]);

                     // La ligne qui m'a pose tant de pb ! Avouez qu'il fallait la trouver !
                    celCur.Style.NullValue = coCurrent.Name;
                    i++;
                }
            }
        }

Merci cs_egwene 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_egwene
cs_egwene 54 Messages postés lundi 31 juillet 2006Date d'inscription 3 avril 2008 Dernière intervention - 25 août 2006 à 10:33
0
Merci
J'ai modifie un peu ma fonction Load( ), ca marche toujours pas mais je pense me rapprocher du but : je donne le nom de ma company a "ValueMember" (coCurrent.Name) mais je prend comme message d'erreur que le nom n'existe pas dans la liste.
Pourtant, je les ai affiche dans une message box et les noms sont bien presents et identiques a celui dans le message d'erreur !

SVP, ca doit pas etre bien complique !

public override void Load()
        {
            // Clear the old data
            Rows.Clear();

            // If the new list is not empty
            if (base.Datas != null)
            {
                // Ajout du nombre de ligne necessaire dans le tableau              
                Rows.Add(Datas.Count);

                // i : indice de la ligne courante
                int i=0;
                // Pour chaque element de la liste d'entreprises associees a l'utilisateur designe
                foreach (Company coCurrent in base.Datas)
                {
                   // MessageBox.Show("index 0 : " + m_cmbColumn.Items[0] +
                   //                                 "index 1 : " + m_cmbColumn.Items[1]);

                   
DataGridViewComboBoxCell cellCur =                                    
                                                                   
(DataGridViewComboBoxCell)(Rows[i].Cells[m_cmbColumn.Name]);
                     // On charge un object de type "entreprise"
                    celCur.ValueMember = coCurrent.Name;

                    celCur.DisplayMember = m_cmbColumn.ValueMember;
                    i++;
                }
            }
        }
Commenter la réponse de cs_egwene

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.