OVH Cloud OVH Cloud

compo + arraylist

7 réponses
Avatar
TOny
J'ai un compo composite basé sur la fonction CreateChildCrontrol.
La classe principal de mon compo contient un objet arraylist que je rempli
par l'intermediaire de la fonction Page_Load de ma page aspx.
Cela fonctionne très bien lorsque j'ouvre la page pour la 1ère fois. La
arrayList se rempli et le compo est dessiné à partir de ça.

Le problème survient dès qu'il y a un post-back. Mon compo n'est pas
redessiné ; Il disparait !

Je vous livre mes quelques reflexions :
Je croyais que la fonction CreateChildConrtol n'était pas relancé lors d'un
post-back !?
Manisfestement la arraylist n'est pas conservée !? il faudrait qu'elle le
soit dans le viewState !?

arf c'est dur l'asp.net entre les fonctions dont j'ai besoin pas dispo avant
la version 2.0 et ces compo qui chargent ce qu'ils veulent quand ils veulent
:o)
Dure journée ;o)

Merci de m'aider vous qui avait perçé tous les mistères du dotnet !

7 réponses

Avatar
Patrice
Y aurait il un test sur le postback ou non ?

une page ASP.NET ne vit que le temps de la requête HTTP elle donc toujours
recréée éventuellement en préservant certaines informations dans le
viewstate.

Essaye (en français) :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconDevelopingCompositeControls.asp


--

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:
J'ai un compo composite basé sur la fonction CreateChildCrontrol.
La classe principal de mon compo contient un objet arraylist que je rempli
par l'intermediaire de la fonction Page_Load de ma page aspx.
Cela fonctionne très bien lorsque j'ouvre la page pour la 1ère fois. La
arrayList se rempli et le compo est dessiné à partir de ça.

Le problème survient dès qu'il y a un post-back. Mon compo n'est pas
redessiné ; Il disparait !

Je vous livre mes quelques reflexions :
Je croyais que la fonction CreateChildConrtol n'était pas relancé lors


d'un
post-back !?
Manisfestement la arraylist n'est pas conservée !? il faudrait qu'elle le
soit dans le viewState !?

arf c'est dur l'asp.net entre les fonctions dont j'ai besoin pas dispo


avant
la version 2.0 et ces compo qui chargent ce qu'ils veulent quand ils


veulent
:o)
Dure journée ;o)

Merci de m'aider vous qui avait perçé tous les mistères du dotnet !




Avatar
TOny
ok merci

Effectivement c'est un peu plus complqué que ce que je pensais. Il y a a
priori pas mal de choses à implémenter.
Il vaudrait mieux que je m'appuye sur un control de type Render avec
implmentation du postBackDataHandler.
J'ai lu également pas mal de choses sur la serialization xml mais j'ai dû
mal à appliquer tout ça !

ça à l'air d'être chaud mais bon faut savoir ce que l'on veut !

Merci encore

Tony

"Patrice" a écrit dans le message de news:

Y aurait il un test sur le postback ou non ?

une page ASP.NET ne vit que le temps de la requête HTTP elle donc toujours
recréée éventuellement en préservant certaines informations dans le
viewstate.

Essaye (en français) :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconDevelopingCompositeControls.asp


--

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de
news:
J'ai un compo composite basé sur la fonction CreateChildCrontrol.
La classe principal de mon compo contient un objet arraylist que je
rempli
par l'intermediaire de la fonction Page_Load de ma page aspx.
Cela fonctionne très bien lorsque j'ouvre la page pour la 1ère fois. La
arrayList se rempli et le compo est dessiné à partir de ça.

Le problème survient dès qu'il y a un post-back. Mon compo n'est pas
redessiné ; Il disparait !

Je vous livre mes quelques reflexions :
Je croyais que la fonction CreateChildConrtol n'était pas relancé lors


d'un
post-back !?
Manisfestement la arraylist n'est pas conservée !? il faudrait qu'elle le
soit dans le viewState !?

arf c'est dur l'asp.net entre les fonctions dont j'ai besoin pas dispo


avant
la version 2.0 et ces compo qui chargent ce qu'ils veulent quand ils


veulent
:o)
Dure journée ;o)

Merci de m'aider vous qui avait perçé tous les mistères du dotnet !








Avatar
Zazar
Bonjour,

Effectivement c'est un peu plus complqué que ce que je pensais. Il y
a a priori pas mal de choses à implémenter.
Il vaudrait mieux que je m'appuye sur un control de type Render avec
implmentation du postBackDataHandler.
J'ai lu également pas mal de choses sur la serialization xml mais
j'ai dû mal à appliquer tout ça !



Si vous voulez juste conserver l'état d'un arraylist lors d'un postback
c'est plutôt facile (enfin ça dépend de ce que vous mettez dedans) : il
suffit d'utiliser le ViewState. Par contre il faut que tous les objets qui
soient dans l'arraylist soient sérialisables. Si vous n'utilisez que des
types primitifs (int, double, ...) ou des string il n'y a pas de problème.
Si vous utilisez vos propres classes, il suffit de leur donner l'attribut
[Serializable] (sous conditions que vos classes n'utilisent que des membres
sérialisables :) )

--
Zazar
Avatar
TOny
ok effectivement j'utilise ma propre classe et donc du coup je ne pouvais
pas la serializer ! du coup je me suis lancé dans une recherche sur la
serailization !
En tout cas merci beaucoup ça devrait me permettre d'avancer et ça fait
plaisir de voir qu'il y a des gens compétents dans le domaine.

Tony

"Zazar" a écrit dans le message
de news:
Bonjour,

Effectivement c'est un peu plus complqué que ce que je pensais. Il y
a a priori pas mal de choses à implémenter.
Il vaudrait mieux que je m'appuye sur un control de type Render avec
implmentation du postBackDataHandler.
J'ai lu également pas mal de choses sur la serialization xml mais
j'ai dû mal à appliquer tout ça !



Si vous voulez juste conserver l'état d'un arraylist lors d'un postback
c'est plutôt facile (enfin ça dépend de ce que vous mettez dedans) : il
suffit d'utiliser le ViewState. Par contre il faut que tous les objets qui
soient dans l'arraylist soient sérialisables. Si vous n'utilisez que des
types primitifs (int, double, ...) ou des string il n'y a pas de problème.
Si vous utilisez vos propres classes, il suffit de leur donner l'attribut
[Serializable] (sous conditions que vos classes n'utilisent que des
membres
sérialisables :) )

--
Zazar




Avatar
TOny
Euh Zarar... comment on fait quand en fait dans la arrayList il n'y a pas
que des types primitifs :o)

"TOny" <tony_barret@(no_spam)hotmail.com> a écrit dans le message de news:
%
ok effectivement j'utilise ma propre classe et donc du coup je ne pouvais
pas la serializer ! du coup je me suis lancé dans une recherche sur la
serailization !
En tout cas merci beaucoup ça devrait me permettre d'avancer et ça fait
plaisir de voir qu'il y a des gens compétents dans le domaine.

Tony

"Zazar" a écrit dans le
message de news:
Bonjour,

Effectivement c'est un peu plus complqué que ce que je pensais. Il y
a a priori pas mal de choses à implémenter.
Il vaudrait mieux que je m'appuye sur un control de type Render avec
implmentation du postBackDataHandler.
J'ai lu également pas mal de choses sur la serialization xml mais
j'ai dû mal à appliquer tout ça !



Si vous voulez juste conserver l'état d'un arraylist lors d'un postback
c'est plutôt facile (enfin ça dépend de ce que vous mettez dedans) : il
suffit d'utiliser le ViewState. Par contre il faut que tous les objets
qui
soient dans l'arraylist soient sérialisables. Si vous n'utilisez que des
types primitifs (int, double, ...) ou des string il n'y a pas de
problème.
Si vous utilisez vos propres classes, il suffit de leur donner l'attribut
[Serializable] (sous conditions que vos classes n'utilisent que des
membres
sérialisables :) )

--
Zazar








Avatar
Zazar
> Euh Zarar... comment on fait quand en fait dans la arrayList il n'y a
pas que des types primitifs :o)



Ca dépend, il y a quoi comme types dedans ? Si c'est une de vos classes et
qu'elle ne contient que des types sérialisables, il vous suffit de rajouter
l'attribut [Serializable] à votre classe. Si ce n'est pas le cas, soit vous
écrivez votre sérialiseur, soit vous n'enregistrez pas tout votre état, et
vous laissez au conteneur la charge de reconstruire le tout.

--
Zazar
Avatar
TOny
En fait je souhaitais stocker des panels mais le week-end m'a porté conseil
puisque je me suis aperçu que je voulais tout stocker comme un bourrin pour
ne pas être ennuyé alors que cela n'était pas nécéssaire. Ou du moins pas
pour le moment.
Quant à écrire mon propre sérializeur ça me parait difficile pour le moment
mais j'imagine qu'il faudra que j'y vienne pour pouvoir traiter certains
cas.
Merci

Tony

"Zazar" a écrit dans le message
de news: 41fa6ef5$1$21786$

Euh Zarar... comment on fait quand en fait dans la arrayList il n'y a
pas que des types primitifs :o)



Ca dépend, il y a quoi comme types dedans ? Si c'est une de vos classes et
qu'elle ne contient que des types sérialisables, il vous suffit de
rajouter
l'attribut [Serializable] à votre classe. Si ce n'est pas le cas, soit
vous
écrivez votre sérialiseur, soit vous n'enregistrez pas tout votre état, et
vous laissez au conteneur la charge de reconstruire le tout.

--
Zazar