thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
20 août 2006 à 12:30
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
4 sept. 2006 à 19:17
Bonjour,
Est il possible de savoir si un événement a été déclencher. Je voudrais tester l'événement RowsRemoved d'un datagridview.
Autre question, comment faire pour savoir si un ligne a été supprimer dans un datagridview ?
cs_Bidou
Messages postés5486Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 20 août 2006 à 20:45
Pour savoir si un évenement a été déclenché (ou pour savoir combien de fois il a été déclenché) je ne vois pas d'autre solution que de faire un counter qui s'incrémente dans l'EventHandler...
En ce qui concerne la deuxième question, c'est l'événement RowsRemoved qui est déclencé lorsqu'une ligne a été supprimé.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 21 août 2006 à 10:04
Merci pour ta réponse.
Pour ma 2ème question, j'ai vu que pour un DataGridRow il existait une propriété "State" qui indique si la ligne a été supprimé, ajouté... . Je ne trouve pas l'équivalent pour le DataGridViewRow ? Il existe bien un RowState mais ça ne correspond pas.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 21 août 2006 à 11:47
Pour tester si l'événement RowsRemoved a été déclenché, voilà ce que j'ai fait :
J'ai déclaré :
private
DataGridViewRowsRemovedEventArgs EventRemoveRow;
Je me suis abonné à l'événement RowsRemoved dans le Load de ma Form :
this
.mvtCaisseDataGridView.RowsRemoved +=
new
DataGridViewRowsRemovedEventHandler(mvtCaisseDataGridView_RowsRemoved);
Dans la fonction mvtCaisseDataGridView_RowsRemoved, j'initialise ma variable EventRemoveRow
private
Je fait tout ça car dans l'événement RowValidating je veux savoir si la ligne en cours est supprimée pour ne pas effectuer mes tests (sinon ça plante).
Voilà comment je fait :
private
Mon problème est que l'événement RowValidating est déclenché avant le RowsRemoved, du coup il fait quand même les tests et donc tout plante...
Est ce que quelqu'un à un idée ?????
Sinon, je passerai pas une variable Booléenne que j'alimenterai dans mon bouton de suppression mais je trouve ça assez moyen.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bidou
Messages postés5486Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 21 août 2006 à 12:32
L'Event validating ne sert pas à savoir quel genre d'action a été prise sur la row, mais à vérifier son contenu, et d'éventuellement faire un Cancel = true si les données ne coresspondent pas à ce qu'on attend.
D'ailleurs, cet event n'est pas levé si on efface une row!
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 21 août 2006 à 16:48
Je suis d'accord avec toi sur le fait que l'event Validating sert à vérifier son contenu et non pas le genre d'action et c'est bien pour une vérification que je l'utilise.
Là où je ne suis pas du même avis, c'est que cet event est bien levé lors de la suppression, d'où le fait que j'essaye d'éviter de faire mes contrôles en essayant le type d'action.
cs_Bidou
Messages postés5486Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 21 août 2006 à 23:18
Euh, dans la journée j'ai rapidement fait un petit test pour être sûr de ce que je disais, et l'event n'était, me semble-t'il, pas levé.
Es-tu sûr de ne pas faire une autre action qui lèverait cet event ?
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 22 août 2006 à 10:38
Tout d'abord, merci encore pour ton aide.
Lorsque j'ajoute une ligne, j'initialise automatiquement certaines zones de ma ligne (la date,...). C'est surement cette initialisation qui lève l'événement.
La cinématique est la suivante :
1/ J'ajout plusieurs lignes (Initialisation automatique de certaines zones de ma ligne et intialisation manuelle des autres zones)
2/ Je me positionne sur la 2ème (J'étais précédemment positionné sur la dernière)
3/ Je la supprime ==> OK
4/ Je me positionne sur la dernière
5/ Je la supprime ==> L'event "RowValidating" est déclenché et génère une erreur.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 22 août 2006 à 12:53
Donc voilà le test que je fais dans le RowValidating
if (
String.IsNullOrEmpty(
Convert.ToString(
this.mvtCaisseDataGridView.CurrentRow.Cells[
"MvtCaisse_Montant"].Value)))
{
e.Cancel =
true;
MessageBox.Show(
"Le montant est obligatoire !",
this.Name,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
Si je fais ça, j'ai une boite de dialogue qui apparaît avec le message d'erreur suivant :
System.IndexOutRangeExecption, l'index 2 n'a pas de valeur.
Par contre, si j'enlève la ligne "MessageBox.Show(
"Le montant est obligatoire !",
this.Name,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
Je n'ai plus de message d'erreur et ma ligne est bien supprimée.
cs_Bidou
Messages postés5486Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 22 août 2006 à 14:54
Essayes voir juste de mettre e.Cancel = true après la messageBox...
Je ne pense pas que ça va changer quand chose mais sait-on jamais.
Si ça marche pas, tu peux éventuellement m'envoyer le projet (ou la partie qui bug en tout cas). Ou encore mieux, le mettre sur un ftp, je jeterai rapidemnet un oeil si c'est pas trop long.
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 22 août 2006 à 19:05
J'ai essayé de mettre e.Cancel = true après la messagebox mais sans succès.
Je veux bien t'envoyer la partie qui ne bug, j'ai refait un projet uniquement avec cette partie.
Comment faire pour te l'envoyer ?
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 4 sept. 2006 à 19:17
C'est génial, tu es trop fort !!!
La solution était tout simplement de faire le contrôle sur le Cell_Validating !!
En revanche, j'ai pas très bien compris à quoi sert l'événement DataError