Donc mon but est qu'une fois qu'un utilisateur clique sur l'article de la liste déroulante, la cellule appellera automatiquement EndEdit(). La chose la plus étrange est que le code ci-dessous fonctionnera sur les ComboBoxesCells 2nd-n que je descends et sélectionne des valeurs mais JAMAIS le premier. Y a-t-il quelque chose qui me manque ici?Un problème étrange avec DataGridViewComboBoxCell, en essayant d'autocommiter les changements
protected override void OnCellClick(DataGridViewCellEventArgs e)
{
base.OnCellClick(e);
DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;
if (control != null)
{
control.DropDownClosed += new EventHandler(control_DropDownClosed);
}
}
void control_DropDownClosed(object sender, EventArgs e)
{
this.EndEdit();
DataGridViewComboBoxEditingControl control = sender as DataGridViewComboBoxEditingControl;
control.DropDownClosed -= new EventHandler(control_DropDownClosed);
}
devrais ajouter que je suis héritant de DataGridView si ce n'est pas évident
Eh bien, je ne fais que raccorder le gestionnaire d'événements du contrôle quand il n'est pas nul. À la première tentative, le contrôle n'est pas nul et je suis capable de me connecter à l'événement "control_DropDownClosed". Je peux même marquer un point à l'intérieur de l'événement. Lors de la première tentative, EndEdit() rétablit la valeur à ce qu'elle était avant la sélection de l'élément déroulant. Tous les appels suivants à EndEdit() dans cette fonction fonctionnent très bien, donc je suis très confus. – Tom
@Tom J'ai vérifié sur Internet et j'ai trouvé quelqu'un avec le même problème que vous: http://www.visualstudiodev.com/visual-basic-express-edition/datagridviewcomboboxcolumn-70711.shtml Sa solution de contournement était de forcer la valeur en le gestionnaire d'événements OnLeave. – LaGrandMere
Eh bien, j'ai trouvé un moyen de contourner cela aussi, je garde juste la trace de la première fois que j'utilise le contrôle d'édition, si c'est avec force que je réinitialise la valeur après l'appel EndEdit. On se sent comme un hack mais ça marche donc je suis content. – Tom