2013-09-24 52 views
0

我要添加控件動態如何在.net中動態添加控件?

代碼:

的.aspx

<body> 
<form id="form1" runat="server"> 
<asp:Label ID="lbl1" Text="Personal Information" Font-Size="Large" ForeColor="White" runat="server" Width="854px" BackColor="SteelBlue" style="margin-top: 0px" Height="60px"> </asp:Label> 
<div id="div1" runat="server"> 
<asp:Panel ID="panelPersonal" runat="server"> 
<div id="divreg" runat="server"> 
<table id="tbl" runat="server"> 
<tr> 
<td class="style8">&nbsp; Visa Number:</td> 
<td class="style20">&nbsp;<asp:TextBox ID="txtUser" Width="160px" runat="server"/></td> 
<td class="style22">&nbsp; Country Name:</td> 
<td class="style23">&nbsp;<asp:DropDownList ID="dropCountry" Width="165px" runat="server"></asp:DropDownList></td> 
</tr> 
<tr> 
<td class="style22">&nbsp; Type of Visa:</td> 
<td class="style23">&nbsp;<asp:DropDownList ID="dropVisa" Width="165px" runat="server"> </asp:DropDownList></td> 
<td class="style22">&nbsp; Type of Entry:</td> 
<td class="style23">&nbsp;<asp:DropDownList ID="dropEntry" Width="165px" runat="server"></asp:DropDownList></td> 
</tr> 
<tr> 
<td class="style8">&nbsp; Expiry Date</td> 
<td class="style20"> 
&nbsp;<%--<BDP:BasicDatePicker ID="BasicDatePicker4" runat="server" onselectionchanged="BasicDatePicker2_SelectionChanged" AutoPostBack="True" />--%> 
</td> 
</tr> 
</table> 
</div> 
</asp:Panel> 
<asp:Button ID="addnewtext" runat="server" Text="Add" onclick="addnewtext_Click" width="76px" /> 

</div> 
</form> 

這裏我使用的用戶控制

的.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddVisaControl.ascx.cs" EnableViewState="false" Inherits="Pyramid.AddVisaControl" %> 
<div id="divreg" runat="server"> 
<table id="tbl" runat="server"> 
<tr> 
<td> Visa Number:</td> 
<td><asp:TextBox ID="txtUser" Width="160px" runat="server"/></td> 
<td> Country Name:</td> 
<td><asp:DropDownList ID="dropCountry" Width="165px" runat="server"></asp:DropDownList></td> 
</tr> 
<tr> 
<td> Type of Visa:</td> 
<td><asp:DropDownList ID="dropVisa" Width="165px" runat="server"></asp:DropDownList></td> 
<td> Type of Entry:</td> 
<td><asp:DropDownList ID="dropEntry" Width="165px" runat="server"></asp:DropDownList></td> 
</tr> 
<tr> 
<td> Expiry Date</td> 
<td> 

</td> 
</tr> 
</table> 
</div> 

.aspx.cs

這裏是問題如果我點擊添加按鈕一行添加成功,但是當我關閉並再次打開以前添加的行也來了。

我認爲問題是靜態詮釋我= 0;

還有其他方法嗎?

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 

     } 
    } 

    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>")); 
     } 
    } 

這是我得到

enter image description here

這就是我想要的,就像下面的圖片我想這樣做

enter image description here

任何想法?提前

+0

我認爲你是對的。這是因爲變量i的靜態聲明。任何使其變爲靜態的特定原因。 –

+0

如果我們使用靜態,行數將會增加 – user2500094

回答

0

您可以使用佔位控制的地方中繼/ GridView控件謝謝,我認爲這是你的situvation

0

我推薦這個解決方案的最佳方法。它與您使用的代碼不同,但仍然非常簡單。 您可以使用服務器端的Repeater控件

<asp:Repeater ID="rpt1" runat="server"> 
<ItemTemplate> 
user control code goes here but first put it in a div(example id - div1) with `style="display:none"` 
</ItemTemplate> 
</asp:Repeater> 

你這樣做

rpt1.DataSource = Utils.GetRptTable(4); // will add the code 4 times but it will not be visible 
rpt1.DataBind(); 

在JavaScript後來的頁面上,你可以找到與具有風格ID DIV1第一個div - 顯示:無並顯示它。這樣你將顯示下一個「行」的字段。

編輯1

如果你能在一個單一的<tr>添加所有字段的用戶控件,你不需要有型有款=顯示一個div:無。你只需要這個類=「GridBody」添加到您的<tbody> - 這樣的:<tbody class="GridBody">

然後你做這行:

<tr class="GridRow" id="row1" style="display: none"> 
... 
</tr> 

,並顯示出該行的JavaScript是:

function addRow() { 
     var body = $(".GridBody"); 
     var indexOfNextRow = $('tr[class="GridRow"][hidden="false"]').length; 
     var tr = $(".GridBody tr")[indexOfNextRow]; 
     tr.style.display = 'table-row'; 
     tr.setAttribute('hidden', 'false'); 
    }