ComboBox DataGridView

Résolu
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008 - 25 août 2006 à 09:19
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008 - 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

2 réponses

cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008
25 août 2006 à 12:40
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++;
                }
            }
        }
3
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008
25 août 2006 à 10:33
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++;
                }
            }
        }
0
Rejoignez-nous