• asp.net 中服务器端控件动态添加和删除


     PlaceHolder :控件容器,本身不显示,主要用来放服务器控件的,只显示其子元素(他里面的控件)

    服务器控件动态添加和删除

     <一>PlaceHolder  中动态添加服务器端控件

    添加控件的一般方法:

    声明一个新控件 如 label lb =new label()

    设置控件属性   如:lb.text="text"

    添加控件到 PlaceHolder 中 如: PlaceHolder1.controls.add(lb)

    可以用 ViewState[AddedControl]=null 判断是不是第一次执行

    动态添加控件,如果需要数据绑定,要先添加控件,然后再数据绑定,提交后(postback) 就不需要重新绑定了

    new 一下就可以了,如:


            if ((ViewState[AddedControl] != null) & ((bool)ViewState[AddedControl]))//第二次就不要数据绑定了
            {
                ph1.Controls.Clear();//清除ph1中的控件
                DropDownList dpl = new DropDownList();
                dpl.ID = "controlid";
                dpl.AutoPostBack = true;
                ph1.Controls.Add(dpl);
            }
            else
            {
               ph1.Controls.Clear();
                DropDownList dpl = new DropDownList();
                dpl.ID = "controlid";
                dpl.AutoPostBack = true;
                ph1.Controls.Add(dpl);
                //链接数据库,设置数据源等 略
                dpl.DataBind();
                ViewState[AddedControl] = true;
            }

    <二>panel中动态添加服务器端控件
    在一个panel 中添加datagrid 并且绑定数据

    Panel panel1 = new Panel();
            panel1.Style["top"] = "200px";//设置属性
            this.Controls.Add(panel1);
            DataGrid dg1 = new DataGrid();//定义datagrid
            BoundColumn s1 = new BoundColumn();//定义一列
            s1.DataField = "first";//绑定列的数据源
            s1.HeaderText = "mzi";//此列标题等属性设置
            dg1.Columns.Add(s1);//加入此列

            dg1.BackColor = "#00000";
            dg1.CellPadding=3;
            //设置 dg1的属性等
            panel1.Controls.Add(dg1);
            //下面数据绑定

    <三> 给动态添加的控件添加事件:
    如:给button 添加事件
    //添加按钮1
            Button bt1 = new Button();
            bt1.CommandArgument = "bt1";//设置命令参数
            bt1.Text = "daji";
            bt1.Command += new CommandEventHandler(this.onbutton);//预定事件
            ph1.Controls.Add(bt1);
    //添加按钮2,又一种方法
            Control cs = ParseControl("<asp:Button ID='Button2' runat='server' Text=Button' commandname='btn' CommandArgument = 'bt2'/>");//把字符串转化为控件
            ph1.Controls.Add(cs);
            Button bt2 = (Button)Page.FindControl("button2");
            bt2.Command += new CommandEventHandler(this.onbutton);//给bt2添加事件

        }
        public void onbutton(object sender, CommandEventArgs e)
        {
            lab1.text = "label1";
        }
    这样二个按钮都对应一个函数,执行同一个事件

    如果想让他们执行不同事件,

    可以这样写:
      public void onbutton(object sender, CommandEventArgs e)
        {
            switch (e.CommandArgument.ToString().ToLower()) 获取命令参数,根据参数的不同,执行不同命令
            {
            case "bt1";
    lab1.text = "label1";
                    break;
                    case "bt2";
                    lab1.text = "label2";
            break;
            }
        }



    <四>:在table中添加行和服务器端控件

    在table中添加一行二列  table要转化服务器端控件
    代码如下:

                    HtmlTableRow tr1 = new HtmlTableRow();//定义行
                    HtmlTableCell td1 = new HtmlTableCell();//定义列
                    Label lb1 = new Label();// 定义 lb1 为Label控件
                    lb1.Text = txt[m];//lb1
                    td1.Controls.Add(lb1);//列中添加lbl
                    HtmlTableCell td2 = new HtmlTableCell();//定义列
                    TextBox txt1 = new TextBox();//textbox
                    txt1.Text = namevalue[m];//text
                    txt1.ID = "t" + m;//id
                    td2.Controls.Add(txt1);列中添加txt1
                    tr1.Cells.Add(td1);//行中添加列td1
                    tr1.Cells.Add(td2);//行中添加列td1
                    TABLE1.Rows.Add(tr1);//表中添加行
               
    取得textbox中数据方法:

    ((TextBox)(TABLE1.Rows[m].FindControl("t" + m))).Text  第m行 id 为"t"+m的控件的值

    添加html 控件,可以用 response.write("")

    为服务器端控件添加客户端事件方法;
    如:buttton.Attributes["onclick"] = "javascript:alert('shijain')";

  • 相关阅读:
    高质量动漫实时画质增强器Anime4K在mpv上的配置
    grep中正则表达式使用尖括号表示一个单词
    虚拟机复制的linux无法联网,解决Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
    Linux将动态IP改为静态IP
    回车、换行的区别
    栈的链接存储
    栈的顺序存储
    冒泡排序
    插入排序
    双向循环链表
  • 原文地址:https://www.cnblogs.com/gergro/p/378772.html
Copyright © 2020-2023  润新知