首页 > 开发 > 综合 > 正文

(论坛答疑点滴)怎么给Table动态添加控件并且得到控件的值?

2024-07-21 02:16:12
字体:
来源:转载
供稿:网友
此例子达到的效果是:
每按一次button1,在表格table1中添加一行(行中有2列,一列是文本框,一列是下拉框),并且当按钮第一次按下时再添加一个按钮,点击这个动态添加的按钮,输出表格中所有的控件的值。

前台:
<form id="form1" method="post" runat="server">
            <asp:table id="table1" runat="server"></asp:table>
            <asp:placeholder id="placeholder1" runat="server"></asp:placeholder><br><br>
            <asp:button id="button1" runat="server" text="添加一行"></asp:button>
        </form>
放置一个table用来动态添加控件,放置一个placeholder用来动态添加按钮,按下这个按钮得到表中控件的值,按下button1按钮一次就添加一行。

后台:

button1按钮的事件:
private void button1_click(object sender, system.eventargs e)
        {
            addtextboxs();
            if(viewstate["count"]==null)addbutton();
            viewstate["count"]=convert.toint16(viewstate["count"])+1;
        }
两个方法:一个用来动态添加表格中的行,一个用来动态添加按钮(按钮不是按下button1添加一次的,所以加上if(viewstate["count"]==null)表示只有第一次加载按下按钮的时候才添加)
private void addtextboxs()
        {
            tablerow tr=new tablerow();
            tablecell tc1=new tablecell();
            textbox t=new textbox();
            t.id="tb"+table1.rows.count;
            tc1.controls.add(t);
            tablecell tc2=new tablecell();
            dropdownlist dpl=new dropdownlist();
            dpl.id="dpl"+table1.rows.count;
            for(int i=0;i<10;i++)dpl.items.add(i.tostring());
            tc2.controls.add(dpl);
            tr.cells.add(tc1);
            tr.cells.add(tc2);
            table1.rows.add(tr);
        }

        private void addbutton()
        {        
            button b=new button();
            b.id="btn";
            b.text="按钮";
            b.click += new system.eventhandler(btn_click);
            placeholder1.controls.add(b);
        }
最后是那个动态添加的按钮的事件:
private void btn_click(object sender, system.eventargs e)
        {
            for(int i=0;i<table1.rows.count;i++)
            {
                response.write(((textbox)table1.rows[i].findcontrol("tb"+i)).text+((dropdownlist)table1.rows[i].findcontrol("dpl"+i)).selectedvalue+"<br>");
            }
        }
其实动态添加的控件不复杂,只需要注意一点:动态添加的控件在postback的时候也需要再次添加,那么怎么知道是不是按下了按钮,或者说怎么知道已经按了几次按钮?就用一个标示位存放在viewstate中即可。

page_load事件:
private void page_load(object sender, system.eventargs e)
        {
            if(viewstate["count"]!=null)
            {
                for(int i=0;i<convert.toint16(viewstate["count"]);i++)
                    addtextboxs();
                addbutton();
            }
        } 注意不要添加if(!ispostback){},相反你倒可以添加if(ispostback),因为页面第一次加载不可能已经按下按钮了。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表