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

此例子达到的效果是:
每按一次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),因为页面第一次加载不可能已经按下按钮了。
参考资源链接:[基于SpringBoot的在线答疑系统设计与实现](https://wenku.csdn.net/doc/7g2cqp2vu0?utm_source=wenku_answer2doc_content) 在开发一个基于SpringBoot的在线答疑系统时,实现学生权限的动态管理功能是确保系统安全性和灵活性的关键。首先,你需要对Spring Security有深入的理解,因为它提供了强大的安全框架来处理认证和授权。你可以通过定义安全配置类来实现基于角色的访问控制,并通过自定义UserDetailsService来动态加载学生的信息。 接下来,你需要使用数据库来存储学生权限信息,并设计相应的数据库表来保存学生角色和权限数据。使用Spring Data JPA或MyBatis等ORM框架来简化数据库操作。当用户登录时,系统应查询数据库,根据学生角色动态加载相应的权限,并生成认证令牌。 此外,使用Spring Boot的自动配置和starters功能可以大大简化开发流程。例如,通过引入spring-boot-starter-security依赖,可以快速集成Spring Security,并通过配置security相关的beans来定义权限规则。同时,使用Spring Expression Language (SpEL)和ACL(Access Control List)可以进一步细化权限控制。 最后,不要忘记为系统编写单元测试和集成测试,确保权限管理功能的正确性。你可以使用JUnit和Mockito等工具来进行测试。通过上述步骤,你可以实现在SpringBoot框架下对学生权限的动态管理,确保系统的安全性和灵活性。为了进一步提升你的开发能力,建议参考《基于SpringBoot的在线答疑系统设计与实现》这份资料,其中包含了完整的系统设计、功能模块的实现细节以及源码,将有助于你全面掌握在线答疑系统的开发和安全配置。 参考资源链接:[基于SpringBoot的在线答疑系统设计与实现](https://wenku.csdn.net/doc/7g2cqp2vu0?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值