[英]Dynamically creation of controls in asp.net c#
我有10個asp:Panel
,其中包含一個帶有asp:labels
和asp:textboxes
,以便檢索公司的聯系方式數據。 我想添加和刪除面板(聯系方式字段集),並且按照以下方法解決了我的問題。
一開始我有這10個面板,只有1個面板可見,其余9個是不可見。 當用戶希望添加新聯系人時,以下面板將更改為Visible = true
。 刪除此特定面板(聯系方式字段集)的方法相同,我將特定面板放置為panel.Visible = false
,所有字段均清除。
由於該公司最多可以檢索10個聯系人(他們的詳細信息-轉換為10個面板),所以當用戶希望在刪除后再添加一個新面板時,就會出現我的問題。
例如,用戶為三個聯系人添加Panel 1
Panel 2
Panel 3
。 然后,他刪除Panel 1
,此后他希望添加另一個面板。 然后我的程序找到多少個可用面板(visible= false)
以創建下一個面板(由於max Panels = 10),但是基於上述情況,我的程序在與頁面加載相同的位置再次創建了Panel 1
(例如在Panel 2
上方),但是如果Panel 4
可用,則會在Panel 3
下方創建它,這會引起用戶困惑。 新面板是在最后一個面板的上方或下方創建的,具體取決於其余可用面板(如果后面的面板的數量小於或等於最后一個面板的數量)。
我該如何解決我的問題,或者我遵循的是完全錯誤的方法? 我嘗試使用JavaScript添加新控件,但是發現很多困難,難以識別每個控制器的ID以便將數據存儲到數據庫中。
可以在后面的代碼中創建面板和其他控件,而不是在ASPX頁面中創建面板,然后可以從代碼中將它們添加到頁面上。 (這樣,如果需要,您可以添加10個以上的面板)
在代碼后面。
Panel panel1 = new Panel();
panel1.Controls.Add(yourLabel); // add your dynamically created controls
this.Page.Controls.Add(panel1); // add the panel to your page
或者,您可以使用面板和其他控件創建用戶控件,從代碼中加載該控件並將其添加到頁面上。 對於用戶控制,您可以查看以下資源。
您應該考慮使用Repeater
控件:
<asp:Repeater ID="rpt" runat="server">
<ItemTemplate>
<asp:Panel ID="pnl" runat="server">
<%-- Code for databinding in here --%>
</asp:Panel>
</ItemTemplate>
</asp:Repeater>
然后,您可以使用代碼背后的列表來表示轉發器中的數據。 刪除和添加新行將導致在此列表中添加條目。 然后,您可以使用DataBinding呈現數據:
public void BindData(object source)
{
rpt.DataSource = source;
rpt.DataBind();
}
在處理添加和刪除的事件中,請使用以下代碼刷新轉發器控件:
list.Add(...);
BindData(list);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.