DataGridView DataError Événement Préserver ligne non valide
Je suis en train de travailler sur une application Winforms qui affiche un DataGridView, liés à une table de base de données.
Il permet l'insertion frais d'entrées, et fait de la validation des données.
Qu'une colonne est vide, ou l'une des contraintes unique est violée, le DataError événement appelle cette fonction:
protected void _data_error(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show(this,e.Exception.Message,"Error");
e.ThrowException = false;
e.Cancel = false;
}
Lorsque le pop-up est fermé, la nouvelle ligne qui a été modifié est supprimé.
Lorsque cela est fait pour une ligne qui a déjà été enregistré (une opération de mise à jour) la ligne perd ses modifications et perd le focus.
Je suppose que cela signifie que je dois signaler l'application pour garder la ligne modifiable, mais je ne sais pas comment faire.
Paradoxalement, si je remplace le gestionnaire d'événement avec un throw(e.Exception)
l'exception est lancée au vent et est capté par l'exception non interceptée, mais la nouvelle ligne est conservée après que la fenêtre se ferme.
Comment puis-je préserver la nouvelle ligne sur un DataError événement?
Edit:
Ma prochaine pensée était de sauver la ligne et l'ajouter à la DataGridView de la source de données après la MessageBox s'affiche.
Qui ne fonctionne pas en raison de l'ajout de données à la source de données de complément comme un commis ligne qui lève une exception en raison de données non valides vs en conservant les données comme un modifiable ligne afin que la validation ne se produise pas.
OriginalL'auteur Chris | 2012-11-21
Vous devez vous connecter pour publier un commentaire.
M'a fallu quelques jours, mais voici comment je l'ai corrigé, mais je suis toujours ouvert pour une meilleure façon.
Dans le DataGridView.RowValidating événement, d'en valider le contenu de chaque cellule.
Si elle n'est pas valide ce faire:
Et assurez-vous de vider le texte de l'erreur sur le prochain voyage par le gestionnaire d'événement.
Pour le cas où un utilisateur est saisie d'un type non valide de données, de texte en numérique uniquement colonne par exemple, vous aurez à gérer l'erreur dans un DataGridView.DataError événement. Utiliser le même code:
mais il n'est pas nécessaire d'effacer le Texteerreur que votre ligne de la validation de l'événement va gérer cela.
Remarque: Cela ne vous permettra pas d'avoir des fenêtres pop-up pour informer l'utilisateur de ce qui est mauvais, il sera utiliser le DataGridView erreur, ce qui est un point d'exclamation rouge sur le côté gauche de la grille qui a le texte de l'infobulle de l'affichage de la Texteerreur vous avez rempli. Il semble à tout moment vous avez un
MessageBox
popup vous allez perdre le focus sur les formulaires de données et de perdre la ligne.OriginalL'auteur Chris
À partir de MSDN
OriginalL'auteur ISCI