Controls crée dynamiquement qui disparaissent au rafraichissement de la page

majoroupas Messages postés 1 Date d'inscription dimanche 21 août 2005 Statut Membre Dernière intervention 21 août 2005 - 21 août 2005 à 23:23
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 22 août 2005 à 09:33
Bonjour a tous, j'ai un petit problème, j'ai pensé a pleins de
solutions de secours mais j'aimerai tout de même savoir si il y a pas
une facon propre car ca me parait quand meme un probleme courant.



Mon probleme : lors de la creation dynamique de WebControl quelconque,
ils apparaissent bien, mais après un autre rafraichissement de la page,
ils disparaissent.



Code d'exemple :



protected System.Web.UI.WebControls.Button Button1;

protected System.Web.UI.WebControls.Button Button2;

protected System.Web.UI.WebControls.Label Label1;

protected System.Web.UI.WebControls.Table Table1;



private void Page_Load(object sender, System.EventArgs e)

{

// Put user code to initialize the page here

}

[...]

private void Button1_Click(object sender, System.EventArgs e)

{

TableCell cell = new TableCell();

cell.Text = "test";

TableRow row = new TableRow();

row.Cells.Add(cell);

Table1.Rows.Add(row);

}



private void Button2_Click(object sender, System.EventArgs e)

{

Label1.Text = "toto";

}



Lors du click sur le Button1, la table Table1 possede bien la
cellule "test", mais lorsque l'on click apres sur Button2, la cellule
disparait.

A quel moment elle a été libérée?

Est-il possible de l'éviter?



Je ne veux pas créer mes objets dans le page_load (parce que j'ai pas le choix pour ce que je veux faire).



Merci de m'éclairer !

3 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
22 août 2005 à 08:41
je pense qu'il serait mieux pour toi de t'adresser sur le forum http://www.aspfr.com


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
22 août 2005 à 09:25
Hello,

Tout les controls créés dynamiquement, doivent être recréés à chaque PageLoad.
Si tu doit pouvoir rajouter plusieurs lignes, gardes-en un compte, ou mets les valeurs dans un tableau en Session.

Amicalement, SharpMao
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
22 août 2005 à 09:33
Un petit exemple :


private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
Session["CellsText"] = new ArrayList();
else
BuildAdditionalRows();
}

private void Button1_Click(object sender, System.EventArgs e)
{
((ArrayList)Session["CellsText"]).Add("test");
TableCell cell = new TableCell();
cell.Text = "test";
TableRow row = new TableRow();
row.Cells.Add(cell);
Table1.Rows.Add(row);
}

private void BuildAdditionalRows()
{
ArrayList TheList = (ArrayList)Session["CellsText"];
foreach(string s in TheList)
{
TableCell cell = new TableCell();
cell.Text = s;
TableRow row = new TableRow();
row.Cells.Add(cell);
Table1.Rows.Add(row);
}
}

private void Button2_Click(object sender, System.EventArgs e)
{
Label1.Text = "toto";
}

Deux détails :
- Si tu as la version 2.0, tu peux utiliser des listes génériques au lieux de l'ArrayList.
- Si tu n'as qu'une case de rajoutée, pas besoin de liste du tout, mets simplement le texte de la cellule en Session.

Amicalement, SharpMao
0
Rejoignez-nous