Scenario:
One of the fresher on my team had trouble with dynamic controls. Controls were added during a button click and were missing from UI as soon as another button is clicked on the page ( basically any other post back happens )
Solution:
Actually its by design, once page post back happens , data is saved in viewstate for dynamic controls also but dynamic controls will not be repainted. You will have to recreate in Page_Init or Page_Load.Here's a small sample which works.
Code:
using System; using System.Web.UI.WebControls; namespace SKN.TestDynamicControl{ public partial class _Default : System.Web.UI.Page { public int controlCount { get { if (null != ViewState["controlcount"]) { return (int)ViewState["controlcount"]; } else { return 0; } } set { if (null != ViewState["controlcount"]) { ViewState["controlcount"] = value; } else { ViewState.Add("controlcount", value); } } } protected void Page_Load(object sender, EventArgs e) { for (int i = 0; i < controlcount; i++) { TextBox txt = new TextBox(); txt.ID = "txt" + i; txt.Text = "Text" + i; pnlPlace.Controls.Add(txt); } } protected void Button1_Click(object sender, EventArgs e) { controlcount = 5; for (int i = 0; i < controlcount; i++) { TextBox txt = new TextBox(); txt.ID = "txt" + i; txt.Text = "Text" + i; pnlPlace.Controls.Add(txt); } } protected void btnAdd_Click(object sender, EventArgs e) { string values = string.Empty; foreach (var item in pnlPlace.Controls) { if (item is TextBox) { values += "," + (item as TextBox).Text; } } Response.Write(values); } } }
0 comments:
Post a Comment