Quantcast
Channel: Web Forms
Viewing all articles
Browse latest Browse all 23244

Dynamic Controls

$
0
0

I have the following code to create dynamic controls on a page

<table><tr><td>one</td><td>two</td><td>three</td><td>four</td><td>five</td><td>six</td></tr><tr><td><asp:TextBox ID="One" runat="server"></asp:TextBox></td><td><asp:TextBox ID="Two" runat="server"></asp:TextBox></td><td><asp:TextBox ID="Three" runat="server"></asp:TextBox></td><td><asp:TextBox ID="Four" runat="server"></asp:TextBox></td><td><asp:TextBox ID="Five" runat="server"></asp:TextBox></td></tr><asp:PlaceHolder ID="DynamicControlsHolder1" runat="server"></asp:PlaceHolder></table><table><tr><td><asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Add Section" /></td></tr></table>

Code Behind

 private List<string> ControlsList
    {
        get
        {
            if (ViewState["controls"] == null)
            {
                ViewState["controls"] = new List<string>();
            }
            return (List<string>)ViewState["controls"];
        }
    }


    private int NextID
    {
        get
        {
            return ControlsList.Count + 1;
        }
    }


    protected override void LoadViewState(object savedState)
    {

        base.LoadViewState(savedState);

        DynamicControlsHolder1.Controls.Add(new LiteralControl("<tr>"));

        foreach (string txtID in ControlsList)
        {
            TextBox txt = new TextBox();
            txt.ID = txtID;
            DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
            DynamicControlsHolder1.Controls.Add(txt);
            DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));

        }
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</tr>"));
    }





    protected void Button2_Click(object sender, EventArgs e)
    {
        TextBox txt1 = new TextBox();
        TextBox txt2 = new TextBox();
        TextBox txt3 = new TextBox();
        TextBox txt4 = new TextBox();
        TextBox txt5 = new TextBox();
        TextBox txt6 = new TextBox();


        txt1.ID = "Size" + NextID.ToString();
        DynamicControlsHolder1.Controls.Add(new LiteralControl("<tr><td>"));
        DynamicControlsHolder1.Controls.Add(txt1);
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));
        ControlsList.Add(txt1.ID);


        txt2.ID = "Size" + NextID.ToString();
        DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
        DynamicControlsHolder1.Controls.Add(txt2);
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));
        ControlsList.Add(txt2.ID);


        txt3.ID = "Size" + NextID.ToString();
        DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
        DynamicControlsHolder1.Controls.Add(txt3);
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));
        ControlsList.Add(txt3.ID);


        txt4.ID = "Size" + NextID.ToString();
        DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
        DynamicControlsHolder1.Controls.Add(txt4);
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));
        ControlsList.Add(txt4.ID);


        txt5.ID = "Size" + NextID.ToString();
        DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
        DynamicControlsHolder1.Controls.Add(txt5);
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));
        ControlsList.Add(txt5.ID);


        txt6.ID = "Size" + NextID.ToString();
        DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
        DynamicControlsHolder1.Controls.Add(txt6);
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</td></tr>"));
        ControlsList.Add(txt6.ID);

    }

Now everyting seems to work ok when i click the button once, the page formats correctly, the issue occurs when i click the button more than 2 times, i did a view source after 3 button clicks to see how it formats and this is how the output comes out which i can't understand why or how to fix it

<table><tr><td>one</td><td>two</td><td>three</td><td>four</td><td>five</td>
 <td>six</td></tr><tr><td><input name="One" type="text" id="One"/></td><td><input name="Two" type="text" id="Two"/></td><td><input name="Three" type="text" id="Three" /></td><td><input name="Four" type="text" id="Four" /></td><td><input name="Five" type="text" id="Five" /></td><td><input name="Six" type="text" id="Six" /></td></tr><tr><td><input name="Size1" type="text" id="Size1" /></td><td><input name="Size2" type="text" id="Size2" /></td><td><input name="Size3" type="text" id="Size3" /></td><td><input name="Size4" type="text" id="Size4" /></td><td><input name="Size5" type="text" id="Size5" /></td><td><input name="Size6" type="text" id="Size6" /></td><td><input name="Size7" type="text" id="Size7" /></td><td><input name="Size8" type="text" id="Size8" /></td><td><input name="Size9" type="text" id="Size9" /></td><td><input name="Size10" type="text" id="Size10" /></td><td><input name="Size11" type="text" id="Size11" /></td><td><input name="Size12" type="text" id="Size12" /></td></tr><tr><td><input name="Size13" type="text" id="Size13" /></td><td><input name="Size14" type="text" id="Size14" /></td><td><input name="Size15" type="text" id="Size15" /></td><td><input name="Size16" type="text" id="Size16" /></td><td><input name="Size17" type="text" id="Size17" /></td><td><input name="Size18" type="text" id="Size18" /></td></tr></table>


The issue seems to be with this piece of code, but i can't figure out what to do with it in order to fix it.

 protected override void LoadViewState(object savedState)
    {

        base.LoadViewState(savedState);

        DynamicControlsHolder1.Controls.Add(new LiteralControl("<tr>"));

        foreach (string txtID in ControlsList)
        {
            TextBox txt = new TextBox();
            txt.ID = txtID;
            DynamicControlsHolder1.Controls.Add(new LiteralControl("<td>"));
            DynamicControlsHolder1.Controls.Add(txt);
            DynamicControlsHolder1.Controls.Add(new LiteralControl("</td>"));

        }
        DynamicControlsHolder1.Controls.Add(new LiteralControl("</tr>"));
    }


Any help is very much appreciated.




Viewing all articles
Browse latest Browse all 23244

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>