HEEEEEEEEEEELP ME : Pasage de TABLEAU entre 2 formulaire

Signaler
Messages postés
20
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
21 mai 2004
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
AIDEZ MOI SVP
Bonjour je voudrait savoir comment passer en argument d'une page a une autre un tableau ARRAYLIST
Pour les string et autre je fait :
dans la premiere page :
Response.Redirect("Page2.aspx?x="+ValX);
et pour récupérer le champ dans la (Page2.aspx )je fait :
Request.QueryString["x"];

Alors pour passer un ARRAYLIST je n'arrive pas a comprendre comment faire
ni pour l'envoie ni pour la récupération
Merci de me répondre
Bye

Nb: je ne veut pas utiliser de sessions car ce n'est pas optimiser comme solution

17 réponses

Messages postés
35
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
7 mars 2005

a moins que je me gourre il est impossible d'envoyer un tableau, ou tout information trop complexe (comme un object) dans l'adresse.

D'apres moi ta seule solution est d'utiliser les variables sessions :
Dim t as new arraylist()
Session("nom_variable")=t

ensuite dans la page suivante tu fais :
Dim t as new arraylist()
t=Session("nom_variable")

bonnechance
Messages postés
35
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
7 mars 2005

oups je n'avais pas vu ton Nb, ben franchement je vois pas alors
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Je viens d'y repenser dans la methode que je t'ai donné tout à l'heure je l'avais fait vite fait et meme un peu trop vite fait car je me suis pas preoccupé de la reception :p

donc revoici le code :
dim Query as string
for each s as string in Al
Query &= s & ";"
next
response.redirect("page2.aspx?Query=" & query )

pour la reception
dim query as string = request.querystring("query")

Dim result as string() ' je sais jamais ou je dois mettre les parenthese d'habitude c'est vs.net qui me gere ca, mais je l'ai pas d'ouvert la :p

result() = query.split(";")

donc resutl() est un tableaux de string ...

@+

Cyril
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
j'ai fait une erreur :-/ je m'en suis apercu car j'etais pas sur des () donc j'ai reecrit ca sous vs.net :) donc revoici

Dim Query As String
For Each s As String In Al
Query &= s & ";"
Next
Response.Redirect("page2.aspx?Query=" & Query)

.
.
.
.
.
Dim Query As String = Request.QueryString("Query")
Dim Result As String()

Result = Split(Query, ";")

Cyril
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

Je n'arrive pas a utiliser les sessions

J'utilise la version beta de visual web developper 2005

J'ai deux fonction

Sub 1_click()
....
Sesssion("montableau")=Montableau
de type System.Web.UI.WebControls.Table

End sub
La pas de souci dans le debuggeur j'ariive a lire mon tableau dans ma session

mais ensuite impossible de le recuperer dans une autre procedure
en faisant Montableau=Sesssion("montableau")
des idées ?
Merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
c'est "normal" car Session("montableau") est du type object donc faut tu caste ton object pour le mettre dans le bon format

MonTableau = ctype(session("montableau"), webcontrols.table)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

Merci pour ton aide
Effectivement j'ai un warning de conversion implicte de type qui saute
avec ta methode.
Mais j'ai encore un souci , je viens d'identifier le pb
En fait dans la premiere methode juste avant

Sesssion("montableau")=Montableau
je mets

Panel2.Controls.Add(Montableau)

Quand je le vire ca marche bien, j'arrive a recuperer mon tableau sinon je recupere un tableau vide.


Je ne comprends pas vraiment pourquoi ?
J'ai l'intuition qu'il y a une histoire de clonage de mon tableau a utiliser mais
je ne saisis pas pourquoi.

Merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Quand tu vires quoi ?

tu peux montrer un peu plus de code, car la j'arrive pas à cerner le problème


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

Sub 1

Panel2.Controls.Add(mytable)


Session(
"tabl") = mytable1

end sub


sub 2
mytable2 =
CType(Session(
"tabl"), WebControls.Table)
end sub

Si je mets Panel2.Controls.Add(mytable) en commentaire je recupere bien mon tableau dans la procedure 2, si je ne le fait pas je recupere un tableau vide
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

pardon c'est


Sub 1

Panel2.Controls.Add(mytable1)


Session("tabl") = mytable1

end sub


sub 2
mytable2 =
CType(Session(
"tabl"), WebControls.Table)
end sub

Si je mets Panel2.Controls.Add(mytable) en commentaire je recupere bien mon tableau dans la procedure 2, si je ne le fait pas je recupere un tableau vide
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
je n'avais encore jamais vu de problème du genre :-/

Si tu fais pour tester

dim tmptable as table = mytable1
panel2.controls.add(tmptable)
session("tabl") = mytable1

Ou alors

session("tabl") = mytable1
panel2.controls.add(mytable1)

et sinon quand tu fais un point d'arret, est-ce que le mytable1 vaut nothing aprés l'ajout au panel2 ?


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

Oui j'ai testé mais ca ne marche pas

En fait il s'agit bien d'un probleme de clones

car pour tout ce qui est de type objet(au sens large, les web controls table sont des objets) vb.net passe uniquement par reference

par exemple
dim a as object
dim b as object

a=b

a=2

alors b=2 (par valeur ca n'est pas le cas)

du style

dim a as integer
dim b as integer

a=b

alors a=2 mais sans assigner une valeur a b

du coup il faudrait que je puisse cloner b dans a pour ne recopier que les valeurs

a=b.clone

clone existe pour le type object mais ca ne marche pas sur web controls table qui est pourtant un descendant de object

J'avais deja eu ce pb en migrant de vba en vb.net et j'avais rattrapper le coup en clonant.

Mais la impossible de le faire et ca me saoule de recopier un à un les elements de mon tableau dans un autre

Merci pour ton aide en tout cas.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Waouhhh !

Alors la tu m'en apprend, je ne savais pas que les types object étaient passé par défaut en reference, alors la je n'ai aucune idée de comment résoudre ca, mais je vais me documenter, essayer de comprendre comment tout ceci fonctionne, et tenter de te répondre :)

En tout cas tient moi au courant si tu trouves une autre solution que de recréer ton tableau.

Idées con, tu peux te servir des mots clés, ByVal et ByRef ?


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

Oui j'ai pensé a mettre BYVal table as object mais ca ne change rien .Les object sont by reference par default

J'ai remarqué la premiere fois quand j'appelais une fonction avec un argument de type object et systematiquement en sortie de cette function mon argument avait changé de valeur

En fait dans ma fonction je faisais un truc du style

variable locale=mon argument d'ou d'enormes bugs

en faisant variable locale=mon argument.clone ca a marché nickel
een sortie de fonction mon argument n'avait pas changé

Mais ces deux variables etaient de types Object qui contient la methode clone .Dans le cas du web control je seche .

En tout cas merci bcp pour ton aide.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
j'ai pas les memes choses que toi, mes valeurs ne sont pas passé en reference meme pour les objects.

Voici mon code



Protected
Sub Page_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles
Me.Load

Dim a
As
Object
Dim b
As
Object
a =
CObj(b)
a =
CObj(2)
write(a)
write(b)

End
Sub



Private
Sub write(
ByVal s
As
Object)

Me.Literal1.Text &= s.ToString &
"
"
End
Sub

j'ai essayé avec le CObj ou pas, et ca me met reference not set to an instance of an object, donc b = nothing chez moi !


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
8
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 mai 2005

Avec les entiers ca marche normalement
tiens voila de la doc sur le sujet
http://plasserre.developpez.com/v1-6val.htm
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
J'ai testé avec une classe et ca passe bien les params par reference, ca me revient maintenant en mémoire.

Pour ce qui est de la fonction clone, il faut que la classe implements ICloneable et c'est loin d'etre le cas de tout le monde, il me semble que c'est expliqué dans l'excellent bouquin de Richard Clark : "Au coeur de Visual Basic .net" mais j'arrive pas à retrouver la page :p

mais tient moi au courant :) j'essayerais de voir ca demain :p et surement relire le bouquin de Richard bientot


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr