[PB]: PageIndexChanged sans ViewStat

Signaler
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
Salut à tous,


J'aurais une petite question à vous poser. Voilà je suis en train de créer un ControlWebPersonnalisé et j'aurais besoin d'un renseignement. Donc ma classe hérite de WebControl, ensuite je lui affecte un premier controle qui est une dropdownlist et ensuite un datagrid.


On m'a dit de mettre la propriété du datagrid, "EnableViewStat" à false.


Du coup pour gérer le tri des colonnes je passe pas des champs cachés. Ensuite j'ai activé la pagination. Je le fais en mode numérique.


Mon souci c'est que lorsque je change le nombre de ligne via ma dropdownlist, l'évènement pageindexchanged n'est plus effectué. Et si je reviens au même nombre de ligne qu'au départ, j'accède à l'évènement et du coup je peux le traité.


Et dc tout ça c'est dans le cas que je mets mon enableviewstat à False, sinon ça marche parfaitement. Mais on me demande de le faire sans le viewstat. :(


Je sais pas si j'ai été assez clair :). Donc si vous voulez vous pencher sur mon cas :) je pourrais vous donner plus de détail.


Merci @+




Manu

5 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Je te proposerais bien une méthode crade en surchargeant la méthode SaveViewState de l'objet page mais comme son nom l'indique c'est crade : http://msdn.microsoft.com/msdnmag/issues/03/02/CuttingEdge/ 

En tout cas ce qui t'arrive et tout à fait normal, reste à savoir pourquoi tu n'as pas le droit d'utiliser le viewstate. Avant asp.net on utilisait des champs caché pour faire ce genre de chose, maintenant on utilise le viewstate qui est plus propre et simple. Il ne faut pas utiliser le viewstate de partout mais un peu de viewstate est nécessaire. pour ce genre de chose. si vraiment tu n'as pas le droit d'utiliser le viewstate il faudra reconstruire ton dropdownlist pendant le init de la page et normalement ca devrait fonctionner :-)

<hr />Cyril - MVS - MCP
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Bah en fait c'est qu'il va stocker tout le datagrid dans le viewstate.


Pour la dropdownlist, j'ai activé le viewstate, il n'y a que pour le datagrid que je le desactive. Mais pour mon problème c'est que l'evenement n'est pas effectué si je desactive le viewstate. En fait il passe que si le nombre de ligne selectionné dans la dropdownlist est egale à celui du départ.


Sinon j'ai trouvé une solution :), en réinventer la pagination :). Je suis en train de faire des linkbutton pour gérer la pagination. Et ça à l'air de marcher. Encore des petits bugs mais je vais réusir :).


Mais je voulais savoir comment ça gérait l'evènement au sein du viewstate ?


@+

Manu
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ah, oui il faut gérer soit même la pagination

je ne comprend "gérait l'evenement au sein du viewstate" ?

<hr />Cyril - MVS - MCP
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Bah en fait c'est que je comprends pas pourquoi l'évènement est effectué lorsque le nb ligne par page est egal au nb ligne par page par defaut. Le viewstat est desactivé pour le datagrid. Et donc je me posais la question si l'évènement était stocké dans le viewstate ??




Manu
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Oui et non. Un event c'est pas une valeur donc il peut pas etre stocké ;-)


Par contre pour qu'il soit déclenché il lui faut plusieurs informations, tout d'abord il lui faut les données qui ont été envoyé a la page lors de la derniere requete, pour récuperer ces données il passe par le viewstate qui va recréer la collection d'items du dropdownlist. puis il regarde la valeur retourné dans une variable post (__EVENTARGUMENT et __EVENTTARGET) et si la valeur récuperer via les variable post et différent de la valeur selectionné lors de la derniere requete alors il lance l'evenement.

En gros c'est comme ca que ca se passe. Bien sur en réalité c'est "un peu" plus complexe :D





<hr />

Cyril - MVS - MCP