zoukankan      html  css  js  c++  java
  • ASP.NET动态添加控件一例

    第一次单击页面中有3个Label,第二次单击有6个,第三次单击有9个,也就是每次单击要在上次的状态下再添加3个。 
    我的方法是,可以通过Session来保存上次的状态,一种解法如下: 
    Test.aspx关键代码: 

    <form id="form1" runat="server"> 
    <asp:DropDownList ID="DropDownList1" runat="server"> 
    <asp:ListItem>1</asp:ListItem> 
    <asp:ListItem>2</asp:ListItem> 
    <asp:ListItem>3</asp:ListItem> 
    </asp:DropDownList> 
    <asp:DropDownList ID="DropDownList2" runat="server"> 
    <asp:ListItem>a</asp:ListItem> 
    <asp:ListItem>b</asp:ListItem> 
    <asp:ListItem>c</asp:ListItem> 
    </asp:DropDownList> 
    <asp:DropDownList ID="DropDownList3" runat="server"> 
    <asp:ListItem>A</asp:ListItem> 
    <asp:ListItem>B</asp:ListItem> 
    </asp:DropDownList> 
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
    <asp:Panel ID="Panel1" runat="server"> 
    </asp:Panel> 
    <asp:Button ID="Button2" runat="server" Text="最后一个Button" /> 
    </form> 

    Test.aspx.cs关键代码: 

    protected void Page_Load(object sender, EventArgs e) 

    if (Session["Panel1"] != null) 

    int index = this.Form.Controls.IndexOf(Panel1); 
    this.Form.Controls.RemoveAt(index); 
    Panel1 = Session["Panel1"] as Panel; 
    this.Form.Controls.AddAt(index, Panel1); 


    protected void Button1_Click(object sender, EventArgs e) 

    for (int i = 0; i < 3; i++) 

    Label label = new Label(); 
    DropDownList ddl = this.FindControl("DropDownList" + (i + 1).ToString()) as DropDownList; 
    label.Text = ddl.SelectedValue; 
    Panel1.Controls.Add(label); 

    Literal br = new Literal(); 
    br.Text = "<br/>"; 
    Panel1.Controls.Add(br); 
    Session["Panel1"] = Panel1; 

    当页面回发时,先记下Panel1在控件树中的位置,并移除它,然后从Session变量获取上次添加后的Panel1,并添加到控件树中原来的位置,在这基础上继续添加新的Label控件。最后的那个Button是为了测试之用,作用有二:一是帮助查看添加的位置是否正确,二是用于检测空回发时是否能维持上次的状态。

  • 相关阅读:
    将Microsoft SQL Server 2000数据库转换成MySQL数据库
    centos7 升级php版本
    Jquery Ajax方法传递json到action
    2015/12/7
    sql server 2008 评估期已过期
    C# 邮件发送注意事项
    ReSharper warning: Virtual member call in a constructor
    EF code first 生成edmx文件
    EF 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
    C# 发送邮件
  • 原文地址:https://www.cnblogs.com/sjqq/p/6425238.html
Copyright © 2011-2022 走看看