Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add controls dynamically when click button in asp.net?

Tags:

c#

asp.net

I'm trying to add controls dynamically

Code:

AddVisaControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddVisaControl.ascx.cs" EnableViewState="false" Inherits="Pyramid.AddVisaControl" %>
<%@ Register assembly="BasicFrame.WebControls.BasicDatePicker" namespace="BasicFrame.WebControls" tagprefix="BDP" %>
<div id="divreg" runat="server">
<table id="tbl" runat="server">
<tr>
  <td class="style8"> Visa Number:</td>
  <td class="style20"><asp:TextBox ID="txtUser" Width="160px" runat="server"/></td>
  <td class="style22"> Country Name:</td>
  <td class="style23">
<asp:DropDownList ID="dropCountry" Width="165px" runat="server">
</asp:DropDownList></td>
</tr>
 <tr>
 <td class="style22"> Type of Visa:</td>
 <td class="style23">
<asp:DropDownList ID="dropVisa" Width="165px" runat="server"> </asp:DropDownList></td>
<td class="style22"> Type of Entry:</td>
<td class="style23">
<asp:DropDownList ID="dropEntry" Width="165px" runat="server"> </asp:DropDownList></td>
</tr>
<tr>
<td class="style8">&nbsp; Expiry Date</td>
<td class="style20">
</td>
</tr>
</table>

.cs code:

Below code is the problem when the first time I click add button it is adding controls properly but If I close the browser window and comes again and click the add button I got more controls

   static int i = 0;
    protected void addnewtext_Click(object sender, EventArgs e)
    {
        i++;
        for (int j = 0; j <= i; j++)
        {
            AddVisaControl ac = (AddVisaControl)Page.LoadControl("AddVisaControl.ascx");
            PlaceHolder1.Controls.Add(ac);
            PlaceHolder1.Controls.Add(new LiteralControl("<BR>"));
        }
    }

In the below image If I click add more visa button I want to get another visa details

enter image description here

Any ideas? Thanks in advance

like image 762
user2500094 Avatar asked Sep 20 '13 10:09

user2500094


2 Answers

I will show one examples you can try it your own way

An idea would be to create a list of buttons in which you'd store the buttons you created inbtnCreateDynamic_click

you could have a method like:

private Button CreateButton(string id, string name)
        {
            Button b = new Button();
            b.Text = name;
            b.ID = id;
            b.Click += new EventHandler(Button_Click);
            b.OnClientClick = "ButtonClick('" + b.ClientID + "')";
            return b;
        }

in btnCreateDynamic_click you could have something like:

Button b = CreateButton("dinamicBtn"+myDinamicButtonsList.Count.ToString(),"dinamicBtn"+myDinamicButtonsList.Count.ToString());
myDinamicButtonsList.add(b);
and in the pageLoad for example you could do something like

foreach(button btn in myDinamicButtonsList){
    form1.Controls.Add(btn));
}

List<Button> myDinamicButtonsList = new List<Button>();

myDinamicButtonsList should be stored somewhere from where it could be retrieved after each request.

EDIT: In page load you could have something like this:

if(Session["myDinamicButtons"] == null){
    List<Button> myDinamicButtonsList = new List<Button>();
    Session["myDinamicButtons"] = myDinamicButtonsList;
}

foreach(Button btn in Session["myDinamicButtons"] as List<Button>){
    form1.Controls.Add(btn));
}

i didn't tested it but it should work.

also put on some information following may more help..

Your button click event at the client will cause a page postback that will start the ASP.Net Page Life-cycle. enter image description here

Your button click event on the server is a PostBackEvent and you should be able to use the same method call CreateMyButton() that you used in the Load or Init events.

like image 153
Sajith Avatar answered Nov 02 '22 07:11

Sajith


if you remove the static 'i' variable and use a hidenInput to maintain the no of created controls (or a session value) you will be fine.

But I suggest you read the following article to find a better way of creating dynamic controls :

Dynamic control creation in ASP.NET

like image 22
Menelaos Vergis Avatar answered Nov 02 '22 07:11

Menelaos Vergis