Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>There are several things that you need to do. Since you are dynamically generating these textboxes, you need to generate them every time the page is being processed (even the postbacks). They also need to be generated before the viewstate is loaded.</p> <p>On each time the page is loaded you need to recreate the textboxes in the panel, this should happen in the page_init function (needs to happen before the viewstate is loaded).</p> <p>For more information on the ASP.Net Page Life Cycle: <a href="http://msdn.microsoft.com/en-us/library/ms178472%28VS.100%29.aspx" rel="nofollow">ASP.NET Page Life Cycle Overview</a></p> <p>The code below is what I think you are looking for: </p> <pre><code>Label myLabel1; Label myLabel2; /// &lt;summary&gt; /// Add the dynamic controls to the page before the viewstate is /// &lt;/summary&gt; /// &lt;param name="sender"&gt;&lt;/param&gt; /// &lt;param name="e"&gt;&lt;/param&gt; protected void page_init(object sender, EventArgs e) { myLabel1 = new Label(); myLabel2 = new Label(); Panel1.Controls.Add(myLabel1); Panel2.Controls.Add(myLabel2); var box1Count = 0; box1Count = Convert.ToInt32(Session["clicks"]); var box2Count = 0; box2Count = Convert.ToInt32(Session["clicks2"]); BuildTextBoxes(box1Count, box2Count); } /// &lt;summary&gt; /// Ensure first time loads properly setup the page. /// &lt;/summary&gt; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //Remove the session when first time page loads. Session.Remove("clicks"); Session.Remove("clicks2"); //Set the Text Boxes and lables to zero. BuildTextBoxes(0, 0); } } /// &lt;summary&gt; /// Add any new text boxes to the screen. /// &lt;/summary&gt; /// &lt;param name="rowCount1"&gt;The total number of text boxes in the first group.&lt;/param&gt; /// &lt;param name="rowCount2"&gt;The total number of text boxes in the second group.&lt;/param&gt; private void BuildTextBoxes(int rowCount1, int rowCount2) { var panel1Count = Panel1.Controls.Count; //Current number of text boxes panel1Count--; //Remove the Label control from the count for (int i = panel1Count; i &lt; rowCount1; i++) { TextBox TxtBoxU = new TextBox(); TxtBoxU.ID = "TextBox1U" + i.ToString(); //Ensure a globally unique name. Panel1.Controls.Add(TxtBoxU); //Add the labels and textboxes to the Panel. } myLabel1.Text = rowCount1.ToString(); var panel2Count = Panel2.Controls.Count; //Current number of text boxes panel2Count--; //Remove the Label control from the count for (int i = panel2Count; i &lt; rowCount2; i++) { TextBox TxtBoxU = new TextBox(); TxtBoxU.ID = "TextBox2U" + i.ToString(); //Ensure a globally unique name; Panel2.Controls.Add(TxtBoxU); //Add the labels and textboxes to the Panel. } myLabel2.Text = rowCount2 + ""; } /// &lt;summary&gt; /// Add another textbox to the first group. /// &lt;/summary&gt; protected void LinkButton1_Click(object sender, EventArgs e) { int rowCount1 = 0; //initialize a session. rowCount1 = Convert.ToInt32(Session["clicks"]); rowCount1++; //In each button click save the numbers into the session. Session["clicks"] = rowCount1; BuildTextBoxes(rowCount1, Convert.ToInt32(Session["clicks2"])); } /// &lt;summary&gt; /// Add another textbox to the second group. /// &lt;/summary&gt; protected void LinkButton2_Click(object sender, EventArgs e) { int rowCount2 = 0; //initialize a session. rowCount2 = Convert.ToInt32(Session["clicks2"]); rowCount2++; //In each button clic save the numbers into the session. Session["clicks2"] = rowCount2; BuildTextBoxes(Convert.ToInt32(Session["clicks"]), rowCount2); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload