簡體   English   中英

在ASP.NET C#中動態創建控件

[英]Dynamically creation of controls in asp.net c#

我有10個asp:Panel ,其中包含一個帶有asp:labelsasp: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

或者,您可以使用面板和其他控件創建用戶控件,從代碼中加載該控件並將其添加到頁面上。 對於用戶控制,您可以查看以下資源。

ASP.NET用戶控件-MSDN
ASP .NET中的用戶控件-CodeProject

您應該考慮使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM