SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010
-
8 avril 2008 à 10:19
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
9 avril 2008 à 09:34
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
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 avril 2008 à 15:01
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 ;-) ;-)
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 avril 2008 à 18:18
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)
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 8 avril 2008 à 15:59
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 avril 2008 à 16:20
>> 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 :-)
SuperBouly
Messages postés410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 8 avril 2008 à 17:10
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és410Date d'inscriptiondimanche 1 février 2004StatutMembreDernière intervention 8 mai 2010 9 avril 2008 à 08:29
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!