bonjour ,
je souhaiterais declarer un array de Textbox mais je voudrais que ces variable soit visible partout donc je pensais les declarer en session . est ce possible ?
merci d'avance
Version imprimable
bonjour ,
je souhaiterais declarer un array de Textbox mais je voudrais que ces variable soit visible partout donc je pensais les declarer en session . est ce possible ?
merci d'avance
tu peux mettre ce que tu veux dans une variable de session, cependant y mettre un tableau de TextBox, je vois pas l'intéret !! pourquoi ne pas juste y mettre les valeurs à afficher dans les textbox ??
Remarque : mieux vaut mettre le moins de chose possible en session, c'est plutot gourmand en mémoire
Tu peux mettre un arraylist (composé de ce que tu veux en terme de type de données) dans la session.Citation:
Envoyé par dyree
Mais c'est quoi un array de Textbox ?
trop rapide le Guitoux1 :D
merci pour vos reponse :)
ce que j'ai pour le moment , c'est :
dim champ_info(30) as textbox
For i=1 To 30
champ_info(i)= new textbox
champ_info(i).text = ""
next i
l'idée ce que je souhaiterai que apres que l'utilisateur ai rentré des valeurs dans les textbox, je puisse men resservir dans une autre fonction.
d'ou le besoin de session non ?
car la porté de champ_info(i) est restreinte par la boucle non ?
:? Si l'autrre fonction est sur la même page, il te suffit de déclarer champ_info au niveau de la page (et pas au niveau de la boucle).
Si ta fonction est dans une autre page, ben tu redéclare champ_info. Vu que tu connais la taille de ton tableau (30) et la valeur a mettre dans les textbox (""), ben pourquoi mettre en session ça alors que tu peux le refaire ailleurs ?? pas de données dynamique, que du dur.
ok je via essayer ca.
il ne faut pas preter attention a la valeur "", je l'avais juste mis la au debut pour initialiser car je croyais avoir un probleme. je ne connais pas par avance ni le contenue ni la taille mais je peux la majorer ( par 30 )
ok jai donc une page comme ceci
dim champ_info(30) as textbox
.
.
.
Function x
for i = 1 to 30
champ_info(i) = new textbox
c.Controls.Add(champ_info(i))
next i
end function
.
.
Function y
for i = 1 to 30
response.write(champ_info(i).text)
next i
end function
or je devrai declarer chacun des textbox(i) comme un textbox, et si je fai ca je perd leur valeur, pourtant jai bien declare textbox(30) en haut . Qqun pourrait il m'aider pliz ?
function X est appelé au premier chargement de ta page (page_load) et et function Y lors d'un PostBack, c'est ça ??
function X est appelé lors d'un appuie sur un bouton A
function X fait apparaitre un formulaire de textbox
une fois que le user a rempli, il clique sur le bouton update qui appelle la fonction
Y
Dans ce cas, ta fonction Y devrait plus ressembler à ceci :
Ca c'est le cas ou tu n'as pas d'autres textbox sur ta pages que celles générées automatiquement. Sinon, il te faut faire un test pour savoir su la textbox txtb est une des textbox de ton tableau..Code:
1
2
3
4
5
6
7
8 foreach(Control oC in this.Controls) { TextBox txtb = oC as TextBox; if (txtb != null) { string value = txtb.Text; } }
PS : pour transformer ce code en VB.Net si tu lis pas le C# : Convertisseur
je vais essayer
pour info , le convertisseur ne fonctionne pas , en tout cas pas lorsque l'on fait un copier coller, il semble quil prenne des balises caché en meme temps.
je suis quand meme un peu triste qu'on soit obliger de faire quelquechose de ce style alors que je voudrais juste que mes varaible soit visible partout sur ma page -.-
mais c'est le cas !! Tes variables sont visibles partout dans la page. Mais là tu fais un amalgame avec le fait ques les pages ASPX soient StateLess. C'est à dire que tes variables sur ta pages ne maintiennent pas leur valeur entre chaque postback. Mais leur portée est la même.
ok
merci , je vai reflechir au moyen le plus logique.
le probleme dans ton foreach, c'est que les textbox sont ajoutés a
c.Controls.Add(champ_info(i)) et C est un tablecell ( je crée un tableau puis jinsere dedans des textbox ) mais de la meme maniere, lors de l'appuie du bouton ce dernier ne garde pas sa valeur, et je ne peux pas utiliser une boucle du type
dim test as textbox
for each test in c.controls
puisqu' il ne voit pas c :D
breeeef je tourne un peu en rond :roll:
Et pourquoi tu n'utilise pas un control Repeater pour y mettre tes TexBox ? comme ça, les valeurs seront gardées d'un postback à l'autre ??
je vias essayer par la.
mais n'aurais je pas le meme probleme ?
je vais creer un repeater sur ma page
le remplir dynamiquement par la function X par des textbox
recuperer les valeurs des textbox par la fonction y
je voudrai ajouter directement a un arraylist qui constituerai la source de mon repeater les labels et des textbox
j'ai pour le moment fait cela
Dim values As New ArrayList()
For i=1 To ds.tables("datestest").Columns.Count-1
values.Add(New textbox())
next i
Repeater1.DataSource = values
Repeater1.DataBind()
mais comment faire pour les labels, sachant que je veu pouvoir leur rentrer une valeur ?
tu pars pas comme il faut.
Tu doit cr&éer un repeater et y mettre dans le itemtemplate un label et un textbox.
Ensuite, tu créer ta collection contenant le text du label et la valeur du textbox (je te conseil de passer par une collection d'objets). Puis tu bind cette liste à ton repeater.
Exemple :
N'oubli pas de spécifié dans ton repeater (coté aspx) ce que tu veut afficher dans le label et dans la textboxCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class MonObjet { public string Label; // passe par des propriétés plutot, là c juste pour te donner une idée public string Valeur; } ArrayList monArray = new ArrayList(); for(inti=0 ; i<30 ; i++) { monObjet obj = new MonObjet(); monObjet.Valeur = "valeur_textbox"; monObjet.Label = "valeurLabel"; monArray.Add(monObjet); } Repeater1.DataSrouce = monArray; Repeater1.DataBind();
tres bien , jai crée ma class, je lui ai fiat contenir un label et un textbox
public class MonObjet
public champ_gauche as label
public champ_droite as textbox
end class
dans ma fonction
dim monArray as new ArrayList()
for i=1 to ds.tables("datestest").Columns.Count-1
dim obj as new monObjet
obj.champ_gauche.text=ds.tables("datestest").Columns(i).ColumnName
obj.champ_droite.text = ""
monArray.Add(obj)
next i
Repeater1.DataSource = monArray
Repeater1.DataBind()
mais je dois encore avoir un probleme de porté car obj.champ_gauche.text ne peut prendre une valeur, et j'obtiens le message d'erreur suivant
Object reference not set to an instance of an object
mea culpa , je repars sur ton exemple en rajoutant le label et le textbox dans la partie aspx
Pourquoi tu t'obstine à vouloir mettre un control textbox dans ton arraylist (ou dans ton objet) !!! juste la valeur, c'est tout !!
désolé désolé ^^
bon la ca marche a peu pres, je nai pas encore fait la recuperation mais je met juste mon code, car il peux peut etre servir
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public class MonObjet Public champ_label2 As String Public champ_textbox2 As String Public ReadOnly Property champ_label As String Get Return champ_label2 End Get End Property Public ReadOnly Property champ_textbox As String Get Return champ_textbox2 End Get End Property Public Sub New(newchamp_label2 As String, newchamp_textbox2 As String) Me.champ_label2 = newchamp_label2 Me.champ_textbox2 = newchamp_textbox2 End Sub end class ........ function x dim monArray as new ArrayList() for i=1 to ds.tables("datestest").Columns.Count-1 monArray.add(New monObjet(ds.tables("datestest").Columns(i).ColumnName, "")) next i Repeater1.DataSource = monArray Repeater1.DataBind() end function . . . </script> <repeater ...> <ItemTemplate> <tr> <td> <asp:Label id="champ_label" text='<%# DataBinder.Eval(Container.DataItem, "champ_label") %>' runat="server" /> </td> <td> <asp:textbox id="champ_textbox" Text='<%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>' Runat="server" /> </td> </tr> </ItemTemplate> </repeater>
Merci guitoux :)
je te tien au courant
ok pour la recuperation , je procede comme ci dessous:
Dim RepeaterItem As RepeaterItem
Dim monTxtResultat As TextBox
for each RepeaterItem in repeater1.Items
monTxtResultat = Me.FindControl("champ_textbox")
Response.Write(monTxtResultat.Text)
Next
neanmoins, j'obtien encore et toujours une erreur de
Object reference not set to an instance of an object
saurais tu pourkoi ?
essai plutot
Code:
1
2
3
4
5
6 for each RepeaterItem in repeater1.Items monTxtResultat = RepeaterItem .FindControl("champ_textbox") Response.Write(monTxtResultat.Text) Next
non jai toujours un probleme d'objet non reconnu
je vais faire quelques tests.
sinon j'aimerai connaitre le type des données présente dans ma table , pour pouvoir agir sur ce que l'utilisateur rentre dans les textbox.
jai utilisé la fonction :
ds.tables("datestest").Columns(ds.tables("datestest").Columns(i).ColumnName).DataType.ToString()
avec ds mon dataset,
table la table lié a mon dataset
il me sors comme reponse :
des System.String et des system.int32
le probleme, c'est que dans ma table il y a un champ de type date, et il ne semble pas en tenir compte. y'a til une autre maniere dacceder au type de champ de sa table ?
ok javance javance ... ou pas 8O
pour eviter les problemes d'instanciation, jai rajouter les quelques lignes :
Dim RepeaterItem As new RepeaterItem
for each RepeaterItem in repeater1.Items
dim monTxtResultat as new textbox
montxtresultat.text = "maison"
monTxtResultat = RepeaterItem .FindControl("champ_textbox")
Response.Write(monTxtResultat.Text)
Next
bon j'obtiens une nouvelle erreur, qui explique peut etre pourkoi cela ne veut pas marcher. Je n'ai pas l'impression qu'il connait bien RepeaterItem et les élement de mon repeater. Le message est le suivant :
Argument not specified for parameter 'itemIndex' of 'Public Sub New(itemIndex As Integer, itemType As System.Web.UI.WebControls.ListItemType)'.
l'erreur est typiquement vb.net ...
ou est placé ce code ? dans une méthode particulière ? si oui, merci d'afficher tout le code
PS : merci aussi de mettre la balise autour du code, c plus lisible
bonjour guitoux,
oui ce code est placé dans une méthode, qui est appelée lors de l'appuie sur un bouton
et dans un autre sub j'ai la mise en place des élement du repeater :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 sub update(sender As Object, e As System.EventArgs) ... Dim RepeaterItem As RepeaterItem Dim monTxtResultat As TextBox For Each RepeaterItem In repeater1.Items monTxtResultat = ctype(Me.FindControl("txtResultat"),textbox) 'Response.Write(monTxtResultat.Text) Next ... end sub
enfin , je declate mon repeater dans l'aspx :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 sub affiche_fiche(sender As Object, e As System.Web.UI.ImageClickEventArgs) for i=0 to ds.tables("datestest").Columns.Count-1 response.write(ds.tables("datestest").Columns(ds.tables("datestest").Columns(i).ColumnName).DataType.ToString()) monArray.add(New monObjet(ds.tables("datestest").Columns(i).ColumnName, "")) next i Repeater1.DataSource = monArray Repeater1.DataBind() end sub
j'ai vraiment besoin de ton aide car la je bloque vriament 8OCode:
1
2
3
4
5
6
7
8
9
10
11
12 <asp:Repeater id="Repeater1" runat="server" EnableViewState="FALSE"> <ItemTemplate> <tr bgcolor="#e8e8e8"> <td> <asp:Label id="champ_lab" text='<%# DataBinder.Eval(Container.DataItem, "champ_label") %>' runat="server" /> </td> <td> <asp:textbox id="champ_text" Text='<%# DataBinder.Eval(Container.DataItem, "champ_textbox") %>' Runat="server" /> </td> </tr> </ItemTemplate> </asp:Repeater>
Moi je ferais (attention, je connais pas VB.Net, c'es approximatif)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 sub update(sender As Object, e As System.EventArgs) ... Dim repeat As RepeaterItem Dim monTxtResultat As TextBox For Each repeat In repeater1.Items monTxtResultat = ctyperepeat.FindControl("champ_text"),textbox) 'Response.Write(monTxtResultat.Text) Next ... end sub
MerrrrrrCiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
c'est cela !!!! . Alors je n'ai pas saisie pourquoi le me ne fonctionnait pas, néanmoins, je remet la structure correcte ( il y avait une ou 2 faute :) )
Encore merci guitoux, je ne saurais pas ce que j'aurais fait sans toi .Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 sub update(sender As Object, e As System.EventArgs) ... Dim repeat As RepeaterItem Dim monTxtResultat As TextBox For Each repeat In repeater1.Items monTxtResultat = repeat.FindControl("champ_text") Response.Write(monTxtResultat.Text) Next ... end sub