关于页面动态添加控件

最近看到很多问题都是关于页面动态添加控件,页面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;
     }

转自http://hi.baidu.com/snyl/blog/item/7b8f80d68a0e0c2e07088b1c.html

posted on 2008-09-08 20:27  YISONG  阅读(263)  评论(0)    收藏  举报

导航