每次都需要重新创建,然后需要保存状态,下一次创建的时候根据上依次的状态来设置是否选择。状态保存可以考虑放在ViewState中

解决方案 »

  1.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    CreateButton();
    }private void CreateButton()
    {
    for( int i=0;i<10;i++ )
    {
    CheckBox cb = new CheckBox();
    cb.ID = this.UniqueID+"_chk_"+i;
    cb.Text = "第"+i+"个";
    object o = ViewState[cb.ID]; if( o!=null )
    cb.Checked = (bool)o;
    else
    ViewState.Add( cb.ID,cb.Checked );
    buttonContainer.Controls.Add( cb );
    }
    }测试通过了,代码其他部分略
      

  2.   

    有没有什么办法能自动检测状态, 
    我在下面的地方看到( http://expert.csdn.net/Expert/topic/1499/1499414.xml?temp=.6547663 )用 protected override void CreateChildControls()重载CreateChildControls,贴子上说“创建的控件在回发后系统会从Post回的数据中设置各个ChildControls的值(保留控件的视图状态)。”,我照样做了能生成但是回发后就不行了,不知怎样做?
      

  3.   

    那是在写控件的时候可以使用,原理是这样:控件重载CreateChildControls后,使用this.Controls.Add的方法把控件加到Controls中,页面框架会负责调用你Add进去的控件的SaveViewState方法把状态保存到ViewState中。
    Post回来后,页面框架会根据控件树调用LoadViewState方法来读取状态。在页面上其实用我的方法还简单一点
      

  4.   

    http://expert.csdn.net/Expert/topic/1353/1353457.xml?temp=3.324527E-02
    看看我的例子
      

  5.   

    icyer() :在OnInit方法中添加什么能详细说下吗?
      

  6.   

    其实不用那么麻烦,假如你是在Page_Load中创建的CheckBox,你把它放在if(!IsPostBack){}外面就行了,如果放在里面就会出现你说的post后控件消失的现象。这样每次页面加载的时候都会重新创建CheckBox,你原来的值它会从ViewState中给你恢复的。
      

  7.   

    在OnInit方法中添加下面的代码:
    CheckBox chk = new CheckBox();
    this.Controls[1].Controls.Add(chk);
      

  8.   

    不用这么复杂,调用Request.Form("YourCheckBoxName")即可得到返回值!