2010-03-24 7 views
4

J'ai un contrôle WinForms DataGridView sur un formulaire. Il y a deux champs dans cette DataGridControl:Après quel événement dois-je effectuer une action après avoir modifié une cellule dans un DataGridView?

  • Email Address
  • Resolved Email Address (calculé sur l'entrée en Email Address)

Après les entrées utilisateur ou modifie une valeur dans Email Address, je veux la valeur Resolved Email Address pour mettre à jour en fonction d'une méthode distincte. Quel événement devrais-je lier pour que la cellule Resolved Email Address soit mise à jour après la mise à jour de la cellule Email Address? Je ne suis pas sûr où placer l'événement parce que l'utilisateur pourrait faire un certain nombre de choses après avoir ajouté/changé une valeur: tabuler à la cellule suivante, cliquer sur annuler sur le formulaire, cliquer sur ok sur le formulaire, etc. Des idées?

+0

La base de données 'DGV' est-elle? Utilisez-vous 'DataTable' ou' List'? – Vivek

+0

@Vivek est databound à un DataTable lorsque le formulaire charge. –

Répondre

1

Voici ce que je l'ai fait:

Utiliser des événements CellBeginEdit et CellEndEdit de DataGridView pour contrôler les choses. Si vous modifiez la cellule et l'onglet Adresse électronique, elle déclenche l'événement CellEndEdit. Vous devriez obtenir un événement CellEndEdit et un clic sur un bouton lorsque vous cliquez sur l'un de ces boutons - dans mes tests, j'ai toujours eu le CellEndEdit en premier, mais je suppose que YMMV.

S'il y avait quelque chose de non valide lors de l'apparition de CellEndEdit, vous pouvez certainement empêcher l'exécution du code OK/Annuler. En outre, vous pouvez utiliser l'événement CellValidating et e.Annuler l'événement si la valeur n'est pas valide. Cela empêchera le déclenchement du clic sur le bouton et vous laissera dans la cellule modifiée.

1

CellValueChanged se déclenche lorsque l'édition est terminée, par ex. lorsque l'utilisateur a navigué loin de la cellule.

+0

Si l'utilisateur clique sur les boutons "OK" ou "Annuler", existe-t-il un moyen d'arrêter le déclenchement de ces événements si quelque chose n'est pas valide dans l'événement "Cell Value Changed"? –

+0

@Ben McCormack: voir la réponse de tsmatt après la ligne. – AxelEckenberger

1

L'ordre des événements pertinents à ce que vous essayez de faire est la suivante:

  • 1) CellValidating

  • 2) CellValueChanged

  • 3) CellValidated

  • 4) CellEndEdit

Je recommanderais d'utiliser CellValidating si vous voulez éviter d'autres mesures en fonction du contenu de la cellule, parce que dans CellValidating, vous pouvez définir le drapeau e.Cancel contenu dans le DataGridViewCellValidatingEventArgs à true, qui retournera automatiquement le contrôle de cette cellule.

Si vous souhaitez simplement mettre à jour un affichage (nom de courrier électronique résolu), utilisez CellValueChanged.

 

private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    e.Cancel = (!validateMyInput(e.FormattedValue.ToString()); 
} 
Questions connexes