Tester un événement

Résolu
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008 - 20 août 2006 à 12:30
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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 ?

Merci à tous

13 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
3 sept. 2006 à 13:13
J'ai bien reçu ton mail, je vais jeter un oeil...

VC# forever
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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é.

VC# forever
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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.
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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

void mvtCaisseDataGridView_RowsRemoved(
object sender,
DataGridViewRowsRemovedEventArgs e)
{
EventRemoveRow = e;
}

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

void mvtCaisseDataGridView_RowValidating(
object sender,
DataGridViewCellCancelEventArgs e)
{
      
if (EventRemoveRow !=
null)
      {
            
if (e.RowIndex == EventRemoveRow.RowIndex)
            
return;
      }
....

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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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!

VC# forever
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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 ?

VC# forever
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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.


 


 


 
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
22 août 2006 à 10:47
Et quelle est l'erreur?

VC# forever
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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.

VC# forever
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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 ?
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 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

Merci encore
0
Rejoignez-nous