je rajoute une fonction de tri sur la datagrid de cette facon :
this.dg.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dgStatsPri_SortCommand);
Le problème, c'est que quand je clique sur une colonne, le programme ne passe pas dans ma fonction de tri, alors que si je rajoute les colonnes directement dans la page aspx, "en dur", là, ça marche.
Quelqu'un aurait une idée d'où peut venir le problème ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 5 oct. 2005 à 11:04
Le problème est simple.
Quand tu rajoutes ta colonne, tu le fais aprés le page_load, une fois que tu auras cliqué sur le tri, la page va se faire un postback, hop ca passe dans l'init, puis ca recréer l'arborescence des controles, il voit que la page vient d'un postback, il regarde les controles qu'il a et il ne voit pas le controle de tri (normal vu qu'il est pas encore ajouté) puis tu ajoute ta colonne ...
pour que ceci fonctionne, il faut donc rajouter ta colonne avec l'abonnement à l'event au plus tard dans le page_init. Ceci se comprend trés bien si on connait comment fonctionne une page aspx de facon correcte :) (ce qui est loin d'etre simple :d)
Thanos_the_yopper
Messages postés309Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 5 mars 2009 5 oct. 2005 à 11:35
Effectivement, je vois le principe. Là où ça va coincer, c'est que ma datagrid est dans un control utilisateur et que j'ajoute les colonnes dans le code behind de la page qui contient ce control utilisateur. Du coup, à moins d'une astuce que je ne connais pas, je ne peux pas ajouter les colonnes avant le Page_Init du control utilisateur. Je viend de vérifier, on passe d'abord par le page_init du control, puis dans le page_init de la page aspx (pour les page_load, c'est le contraire par contre).
Du coup, je suis bien bloqué là ...
Merci quand même pour ta réponse :)
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 5 oct. 2005 à 11:52
Effectivement tout ceci est emmerdant :p
La solution que je te propose c'est de passer ce que t'as besoin via une propriété de ton userControl ...
public class tonUC
inherits usercontrol
public property dgc as boundcolumn
end property
sub page_init
if not dgc is nothing then
this.datagrid1.columns.add(dgc)
end sub
end class
maintenant le problème c'est de passer la colonne au UserControl à partir de la page avant son init ... :p en .net2 la page a l'event preinit qui sert justement à ca :d
en .net1 il va te falloir surcharger une méthode qui arrive avant le init ... :) la toute premiere qui est appellé c'est processrequest mais il vaut mieux surcharger la derniere avant le page_init et ca doit etre createchildcontrols (pas sur) le mieux et que tu surcharges toutes les méthodes et rajoutent un point d'arret sur chacune :)
Je sais pas si j'ai été clair, donc hésite pas à demander d'avantages d'infos :)
Thanos_the_yopper
Messages postés309Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 5 mars 2009 5 oct. 2005 à 13:32
y'a quelque part où trouver la liste des méthodes appelées ?
humm ... en fait, j'ai pensé à un truc, mais c'est peut-être un peu goret : les colonnes que je rajoute, je les garde soit en session, soit dans le viewstate (je sais pas ce qui est le plus gourment en ressource d'ailleurs) et dans le page_init de mon user controle, si on est en postback je rajoute les colonnes dans ma datagrid via ce que j'ai mis en viewstate/session. Maintenant, ça fait peut-être plus bidouille qu'autre chose et surtout, je sais pas quel impact ça peut avoir sur le temps d'affichage de la page et sur les ressources utilisés.
Je vais regarder les fonctions dont tu me parles pour voir celles qui sont appelé avant le page_init :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Thanos_the_yopper
Messages postés309Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 5 mars 2009 5 oct. 2005 à 14:57
bon, ben je vois à peu près comment faire du coup :)
merci bien pour toutes ces réponses ^__^
(je vais accepter la première réponse parce que c'est elle qui explique le pourquoi du problème ^^)