您的位置:首页 > 移动开发 > Objective-C

关于页面动态添加控件

2007-04-26 22:50 381 查看
  最近看到很多问题都是关于页面动态添加控件,页面postback以后,就取不到这些控件了。其实每次在页面上动态添加控件(或者在数据控件上动态添加列),它们的状态是不会被添加到页面的ViewState中去的,所以每次回送回来,它们就消失了,程序员只能手动把这些控件再次添加到页面上来,才会还原它们的状态。
  MSDN上提供了一种参考的方式,override页面的LoadViewState方法,因为该方法调用是在page_load事件之前,它可以保证这些动态控件在事件处理函数里面是可用的。下面是一个很简单的例子,例子很简单,页面上动态添加10个textbox,在viewstate里面保存一个标志位,表示是否动态添加了这些控件,在LoadViewState函数里进行判断,如果有这个标志,则重新加载这些控件。
 


public bool IsDynamicLoadControl




    

{


        get




        

{


            object dynamic = ViewState["IsDynamicLoadControl"];


            return dynamic == null ? false : true;


        }


        set




        

{


            ViewState["IsDynamicLoadControl"] = value;


        }


    }


    protected override void LoadViewState(object savedState)




    

{


        base.LoadViewState(savedState);




        if (IsDynamicLoadControl)




        

{


            LoadTextBox();


        }


    }




    protected void Page_Load(object sender, EventArgs e)




    

{


        if (!IsPostBack)




        

{


            LoadTextBox();


        }


        


    }


    private void LoadTextBox()




    

{


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




        

{


            TextBox input = new TextBox();


            input.ID = "input" + i.ToString();


            this.form1.Controls.Add(input);


        }


        IsDynamicLoadControl = true;


    }

最后可以进行测试一下:


TextBox tb = this.FindControl("input0") as TextBox;


        ClientScript.RegisterStartupScript(


            this.GetType(), 


            "", 


            string.Format("<script>alert('{0}')</script>",tb.Text));
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息