Création de TextBox Dynamique et évènement.
Bonjour,
Je suis aujourd'hui sur un projet en asp.net qui me pose un problème depuis quelques jours. Alors je vais essayer d'être clair. L'utilisateur doit pouvoir éditer certaines données, certains jours, pour cela je vérifie qu'il a les droits etc. et juste après je créer de façon dynamique des TextBox pour qu'il puisse y placer les données qu'il veut modifier.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
//Condition à remplir
if (Edit == true && DateEdit(i) == true)
{
TextBox tb = new TextBox();
Resum.Rows[i + 2].Cells[1].Controls.Add(tb);
tb.Visible = true; tb.EnableViewState = true;
tb.TextChanged += new System.EventHandler(this.Tb_TextChanged);
tb.ID = "MonTextbox"
if (arrond(rPreSopRemp.GetValue(0).ToString()) == "")
{
tb.Text = "0";
}
else
{// Chargement grâce à une requête sql.
tb.Text = arrond(rPreSopRemp.GetValue(0).ToString());
} |
Mon problème c'est que je n'arrive pas à garder dans le ViewState la/les valeur de ma/mes Textbox, il y a normalement un bouton pour qu'il puisse enregistrer les données, mais les textbox disparaissent si je clique dessus.
De plus visiblement pour le moment l'ajout de l'évènement ne fonctionne pas non plus. Pour l'évènement voilà ce que j'ai écris :
Code:
1 2 3 4 5
|
private void Tb_TextChanged(object sender, System.EventArgs e)
{
Response.Write("Vous venez de modifié : avec la valeure : " + tb.Text);
} |
Malgré pas mal d'heures à passé là dessus, je n'arrive pas à trouver de solution. Ni à comprendre vraiment comment tous le processus se déroule.
Merci d'avance pour une réponse, ne serait-ce qu'une ébauche d'idée pour que je trouve une solution. :)
Bonne journée à tous.
Solution : recréer les contrôles
Salut,
Cette erreur arrive souvent lors de la création de contrôles dynamique. L'erreur ne provient pas non plus du viewstate : il a la charge de conserver l'état des contrôles de la page, pas la liste des contrôles de la page !
Si tu me suis, il faut donc rajouter une nouvelle fois le contrôle dans le postback (le plus tôt possible, init est bien) pour que le viewstate restore l'état mais aussi que les events fonctionnent pour ce nouveau contrôle.
C'est pas très pratique mais c'est le prix à payer pour faire du dynamique en asp.net.