【问题标题】:Dynamically creation of controls in asp.net c#在asp.net c#中动态创建控件
【发布时间】:2012-11-28 08:49:00
【问题描述】:

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

【问题讨论】:

  • 你为什么不发布你的代码?请发布它以使其更具可读性=)

标签: c# asp.net controls panel dynamic-data


【解决方案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 User Controls - MSDN
User controls in ASP .NET - CodeProject

【讨论】:

  • 因为我的面板上有 css 和验证规则在 aspx 文件中,我可以从后面的代码中完成所有这些吗?用户控制是什么意思?
  • @mike,那么最好的选择是用户控件,您可以查看我提供的有关用户控件的链接
【解决方案2】:

您应该考虑使用Repeater 控件:

<asp:Repeater ID="rpt" runat="server">
    <ItemTemplate>
        <asp:Panel ID="pnl" runat="server">
            <%-- Code for databinding in here --%>
        </asp:Panel>
    </ItemTemplate>
</asp:Repeater>

然后您可以使用代码隐藏中的 List 来表示中继器中的数据。删除和添加新行将导致向此列表添加条目。然后你可以使用 DataBinding 来展示你的数据:

public void BindData(object source)
{
    rpt.DataSource = source;
    rpt.DataBind();
}

在事件处理中添加和删除使用此代码,刷新转发器控件:

list.Add(...);

BindData(list);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2014-07-26
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多