Updatepanel UserControl et triggers

Résolu
Signaler
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
bonjour,
J'ai un usercontrol MonUserControl.ascx que j'ai doté d'évènements.
J'ai d'autre part un GridView qui doit être rafraîchi lors d'un de ces évènements:

EventChangeDeCategorie(
ByVal Categorie
As
Integer)

Tout va bien jusqu'à ce que je mette mon GridView dans un updatePanel
Naturellement, je le règle avec les options :
<asp:UpdatePanel
ID= " UpdatePanel2 "
runat ="server"
UpdateMode= "Conditional">
<asp:AsyncPostBackTrigger
ControlID=" MonUserControl1 "
EventName ="changedecategorie"
/>
<ContentTemplate>
<MONGRIDVIEW />
</ ContentTemplate>
Et ça ne marche pas car mon évènement n'a pas la signature  Standard : (sender as object, e as eventArgs)
(l'erreur est:
The 'changedecategorie' event on associated control 'MonUserControl1' for the trigger in UpdatePanel 'UpdatePanel2' does not match the standard event handler signature.)

Y a-t-il un moyen de contourner ce problème ?  ...sans toucher à mon UserControl, ce serait le rève ! car la signature de mon évènement ne  me semble pas modifiable.
Merci de vos lumières
SuperBouly

7 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
Bonjour,

Non, ce n'est pas possible, mais par contre c'est très simple de respecter les conventions, et puis ce serait tellement plus joli ...
Par contre je ne vois pas en quoi ca interesse l'UpdatePanel de savoir la signature, si tu dois fare un asyncpostback pour tous les events de ton UserControl, tu peux supprimer l'attribut EventName, sinon tu vas être contraint de coder en respectant les conventions ;-) ;-)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
ll te suffit de faire une classe comme "d'habitude"

public class EventNameEventArgs

public sub new(categoryID as integer)
   me._categoryID = categoryID
end sub

private _categoryID as integer
public property CategoryID as integer
  get
    return me._categoryID
  end
  set (value as integer)
     me._categoryID = value
  end
end property

end class

normalement ca doit être ca (beurk c'est vraiment pas beau VB)

Au niveau de la convetion, le nom de ton event n'est pas bon, ca devrait plutot être CategoryChanged et l'eventArgs devrait être CategoryChangedEventArgs

et enfin tu devrais faire le raiseevent dans une méthode OnCategoryChanged (qui ne fais que ca :p)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
Par convention, si un jour tu peux déclencher ton event de plusieurs endroits différents, tu n'auras qu'a appeller ton event OnPouet();

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

merci de ta réponse
justement, j'aurais aimé ne pas faire d'asyncpostback pour tous les évènements, mais je vois qu'il faut rebidouiller mon code sur l'userControl. Pour l'instant, c'est vrai qu'il me suffit de ne rien mettre sur l'eventName pour que ça fonctionne

SuperBouly
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
>> Rebidouiller mon code sur l'usercontrol : y'a rien à écrire !
Il suffit de créer un EventArgs qui a comme propriété les arguments de ton event, et ensuite tu déclare ton event avec

public event EventHandler<MyEventArgs> MonEvent ... ca se fait vraiment en TRES peu de temps et au moins le code sera plus joli :-)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

bon, je ne suis pas du tout à l'aise avec ça, d'autant + que je ne connais très mal le C#, je traduis donc en vb:, en m'aidant de la doc MSDN
situation de départ :
Event ChangeDeCategorie (ByValCategorieAs Integer)

situation finale
:
Public
EventChangeDeCategorie
As EventHandler(
OfMyEventArgs)
et dans ma sub, au lieu de
RaiseEvent ChangeDeCategorie
(maCategorie)' maCategorie est l'integer donné dans la sub
je mets
RaiseEvent ChangeDeCategorie
(Me, New MyEventArgs(macategorie))
avec une classe au dessous
Public

Class
MyEventArgs
Inherits
EventArgs

Public

Sub

New
(
ByVal
Categorie
As

Integer
)
End

Sub

Public

Property
Categorie ()
As

Integer
Get
Return
???? 'QUE DOIS-je mettre ici ?

End

Get

Set
(
ByVal
value
As

Integer
)
???? = value

End

Set
End

Property
End

Class

Là, il me manque des billes, je ne dois pas être très loin du compte, mais je ne me suis jamais servi de ça, c'est pas du tout clair encore

SuperBouly
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

Ca marche impec! J'ai pu mettre un trigger comme je voulais sur cet event
Vraiment merci de ton aide, j'ai découvert quelquechose...(en fait on lit des tas de trucs et on les oublie)

En première approximation, j'ai remplacé tout bonnement et au bon endroit
RaiseEvent  ChangeDeCategorie(NumeroDeCategorie)
par:
RaiseEvent  ChangeDeCategorie (Me, New  EventNameEventArgs (NumeroDeCategorie))

Je vais bouger le nom des variables selon ton conseil. C'est en effet + rigoureux et clair.
mais je ne vois pas pourquoi tu me conseilles de le mettre dans une sub qui ne fait que ça.
bonsoir,
SuperBouly
PS Pardonne moi pour le vb pas beau, je ne connais que ça!




SuperBouly





SuperBouly