Comment faire pour exécuter CellEndEdit seulement lorsque la Cellule ValueChanged dans DataGridView
je veux courir CellEndEdit uniquement lorsque la valeur de la cellule est modifiée, essayé de mettre
if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == e.FormattedValue.ToString())
return;
dans CellValidation cas, la Cellule de Validation de l'événement n'retour, mais CellEndEdit obtient également exécutées et mises à jour, updated date
& by
champs lorsque l'utilisateur a seulement allé dans le mode d'édition et sortit sans modification de la valeur de la cellule.
Par les temps CellEndEdit est atteint CellValue
& Formatted Value
sont les mêmes et ne pouvais donc pas mettre cela dans CellEndEdit.
Une solution triviale est de définir un indicateur dans CellValidation et retour CellEndEdit lorsque le drapeau est réglé, mais cela semble être un risque d'erreur de solution il y a environ 10 ceint sur la forme. Donc 10 drapeaux?
Vous devez vous connecter pour publier un commentaire.
Au lieu de l'exécution de vos tâches dans CellEndEdit, les mettre dans CellValueChanged. Il est déclenché uniquement lorsque la valeur de la cellule est modifiée. Veuillez noter qu'il se déclenche lors de votre DataGridViews sont initialement peuplé, mais à poignée, vous pouvez mettre juste une variable disant formInitialized ou quelque chose, assurez-vous que vous n'êtes pas à l'exécution de votre CellEndEdit lorsque vous remplissez vos grilles de données.
Et pour répondre à votre question, il n'existe aucun moyen de déterminer si une valeur est modifiée lorsque CellEndEdit est tiré, parce qu'il est toujours déclenché lorsque la cellule se met à sortir du mode edit. La seule solution est, comme vous l'avez proposé, pour stocker la valeur ancienne de l'extérieur, mais vous l'avez déjà remarqué pourquoi est-ce mal (bien que cela fonctionne vraiment bonne dans la plupart des cas).
Vous pourrait certainement y arriver par la capture de la valeur actuelle de la cellule dans
CellBeginEdit
, puis en les comparant à la valeur actuelle de la cellule dansCellEndEdit
. (Ou utilisez votreCellValidation
truc.)Pour éviter "de multiples drapeaux", vous pouvez utiliser un
Dictionary<DataGridView,object>
de sorte que vous pouvez les clés dans le dictionnaire avec le courant de l'événement de la grille, puis d'obtenir ou de définir la valeur appropriée.Mais si vous voulez calculer la valeur édité, vous pouvez utiliser le suggère question par J. Fisher genre:
Je l'ai fait comme ça:
C#:
VB.Net:
J'ai essayé comme 1 heure à obtenir, parce que personne n'a une solution pour ça, alors j'ai pensé qu'il pourrait être utile pour d'autres