0

我有 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,以便将数据存储到我的数据库中。

4

2 回答 2

1

您可以在后面的代码中创建面板和其他控件,而不是在 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

于 2012-11-28T08:52:28.707 回答
0

您应该考虑使用该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);
于 2012-11-28T09:05:11.450 回答