djwaza
Messages postés13Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention26 mars 2010
-
2 juil. 2009 à 15:07
djwaza
Messages postés13Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention26 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;
}
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);
djwaza
Messages postés13Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention26 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.
djwaza
Messages postés13Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention26 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."