Probleme avec les DataGridViewComboBoxCell

Résolu
djwaza Messages postés 13 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 26 mars 2010 - 2 juil. 2009 à 15:07
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

2 réponses

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
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.
3
djwaza Messages postés 13 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 26 mars 2010
3 juil. 2009 à 09:23
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
0
Rejoignez-nous