Probleme avec les DataGridViewComboBoxCell [Résolu]

Messages postés
13
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
26 mars 2010
- - Dernière réponse : djwaza
Messages postés
13
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
26 mars 2010
- 3 juil. 2009 à 17:30
Bonjour la communauté.
Je développe actuellement un UserControl en C# 3.0 qui est en fait un DataGridView amélioré.
En fait on lui passe un List d' un objet de type colonne qui permet de typer les colonnes de mon datagrid en checkbox ou button ou combobox.
Je me suis appuyer sur le code du designer pour faire mes colonnes dynamiquement et je rempli mes colonne combobox grace a une datatable.
Mon problème vient ensuite. Sur le formulaire, quand on retrouve la liste des données de la datatable dans le combo mais quand le combo perd le focus, il revient sur sa premiere valeur.

Voici comment je cré mes colonne combobox :
 case 5://Combobox
                        DataGridViewComboBoxColumn columnCombobox = new DataGridViewComboBoxColumn();
                        columnCombobox.HeaderText = uneColonne.StrEnteteColonne;
                        columnCombobox.Name = uneColonne.StrNomZone;
                        columnCombobox.Visible = uneColonne.BColonneVisible;
                        columnCombobox.Width = uneColonne.ILargeurColonne;
                        //on declare le style de la colonne
                        DataGridViewCellStyle aDataGridViewCellStyleComboBox = new System.Windows.Forms.DataGridViewCellStyle();
                        switch (uneColonne.IAlignementColonne)
                        {
                            case 1://gauche
                                aDataGridViewCellStyleComboBox.Alignment = DataGridViewContentAlignment.MiddleLeft;
                                break;
                            case 2://centre
                                aDataGridViewCellStyleComboBox.Alignment = DataGridViewContentAlignment.MiddleCenter;
                                break;
                            case 3://droite
                                aDataGridViewCellStyleComboBox.Alignment = DataGridViewContentAlignment.MiddleRight;
                                break;
                        }
                        if (uneColonne.StrFormatAffichage.Trim() != string.Empty)
                        {
                            aDataGridViewCellStyleComboBox.Format = uneColonne.StrFormatAffichage;
                        }
                        else
                        {
                            aDataGridViewCellStyleComboBox.Format = string.Empty;
                        }
                        //aDataGridViewCellStyleComboBox.NullValue = null;
                        columnCombobox.DefaultCellStyle = aDataGridViewCellStyleComboBox;
                        columnCombobox.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
                        if (uneColonne.BEditable == true)
                        {
                            columnCombobox.ReadOnly = false;
                        }
                        else
                        {
                            columnCombobox.ReadOnly = true;
                        }

                        dataGridViewDeBase.Columns.Add(columnCombobox);
                        break;

Vient ensuite la partie ou je rempli mes combos. Pour sela j'ai une hashtable qui contient en clerfs le nom de la colonne et en valeur ma datatable.
 public void AjoutLigneVierge()
        {
            this.dataGridViewDeBase.Rows.Add(1);

            foreach (string aKey in this.htLesCombos.Keys)
            {
                DataGridViewComboBoxColumn oDataGridViewComboBoxColumn = (DataGridViewComboBoxColumn)this.dataGridViewDeBase.Columns[aKey];
                DataSetComboBox.ComboBoxDataTable dtDonneesCombo = (DataSetComboBox.ComboBoxDataTable)(this.htLesCombos[aKey]);
                oDataGridViewComboBoxColumn.DataSource = dtDonneesCombo;
                oDataGridViewComboBoxColumn.DisplayMember = dtDonneesCombo.LibelleColumn.ToString();
                oDataGridViewComboBoxColumn.ValueMember = dtDonneesCombo.CPColumn.ToString();
            }
        }

Si vous avez une idée de pourqoi quand la combobox perd le focus la premiere valeur est sélectionn"e j'en serais reconnaissant.

Merci
Afficher la suite 
A voir également:

2 réponses

Meilleure réponse
Messages postés
13
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
26 mars 2010
3
Merci
Après 2 jours de recherche, j'ai trouvé d'où venait le probleme.

Tout venait de la datable et lorsque je faisait :
oDataGridViewComboBoxColumn.DisplayMember = dtDonneesCombo.LibelleColumn.ToString();
oDataGridViewComboBoxColumn.ValueMember = dtDonneesCombo.CPColumn.ToString();

.Net fait correspondre les colonnes. Mais dans mon dataTables les colonne ne correspondaient pas.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 129 internautes nous ont dit merci ce mois-ci

Commenter la réponse de djwaza
Messages postés
13
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
26 mars 2010
0
Merci
J'ai trouver quelque chose sur la msdn mais je comprends pas trop ce qu'ils veulent nous dire :
"La valeur mise en forme de la cellule doit toujours être l'une des valeurs de la collection Items ou une erreur se produira et le premier élément de la collection sera rétabli comme valeur de la cellule."

Liens : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.datagridviewcomboboxcell.items.aspx
Commenter la réponse de djwaza