2012-06-11 4 views
3

J'ai un DataGridView avec une colonne de texte et une colonne de case à cocher. Lorsque l'utilisateur clique sur la case à cocher, je souhaite inviter l'utilisateur. J'ai ce travail en utilisant le code ci-dessous:CurrentCellDirtyStateChanged valide trop tôt

private void grid_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    var grid = sender as DataGridView; 
    if (grid.IsCurrentCellDirty) 
    grid.CommitEdit(DataGridViewDataErrorContexts.Commit); 
} 

Cependant, lorsque je tente de saisir dans la colonne de texte, il ne cesse de commettre que je tape au lieu de quand je suis fini de taper. Cela provoque la mise en évidence de la cellule de texte et ne me permet d'entrer qu'un seul caractère. Comment puis-je modifier cet événement pour gérer uniquement lorsque la valeur de la case à cocher change?

Répondre

2

Ce que vous devez faire est seulement de faire attention à la case à cocher, pas le texte. La solution que j'ai trouvée pour un problème similaire était de mettre un événement sur CellEnter qui enregistrait quel champ était édité. L'événement de manipulation sale vérifie alors ce qu'il faut faire. Pourquoi les coordonnées ne sont pas disponibles dans le chèque sale que je ne peux pas imaginer.

1

J'ai juste eu le même problème. Si vous voulez faire attention à une colonne spécifique (CheckBox Column) cela fonctionnera pour vous.

private void grid_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    var grid = sender as DataGridView; 

    if (grid.IsCurrentCellDirty && grid.CurrentCell.ColumnIndex == 1) 
    grid.CommitEdit(DataGridViewDataErrorContexts.Commit); 
}