我用代码创建了几个CheckBox,现在要得到被选中的CheckBox的ID,应该怎么办?
创建代码
if(!IsPostBack)
{for(int i=0 ;i<=10;i++)
{
 CheckBox cktemp=new CheckBox();
this.Controls[1].Controls.Add(cktemp);
cktemp.ID="ch"+i.ToString();
}
}
创建没有问题。
获得代码:
private void Button1_Click(object sender, System.EventArgs e)
{
for(int i=0 ;i<=10;i++)
{   
CheckBox tempck=(CheckBox)FindControl("ch"+i.ToString());;//11
if(tempck!=null && tempck.Checked)
{
Response.Write(tempck.ID.ToString());
}

}
}
现在总是得不到,就是说tempck!=null总是FALSE,
如果用VB的话:DIM tempck as new CheckBox
               tempck=FindControl("ch"+i.ToString())
    然后再判断就没有问题,而在C#中这样写不行,因为类型不同。
大家给看看应该怎么办

解决方案 »

  1.   

    CheckBox tempck= new CheckBox() 
    tempck = FindControl("ch"+i.ToString());;//11这里有两个符号
      

  2.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    for(int i=0;i<10;i++)
    {
    CheckBox chTemp = new CheckBox();
    chTemp.ID = "ch" + i.ToString();
    this.Controls[1].Controls.Add(chTemp);

    }
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void Button1_Click(object sender, System.EventArgs e)
    { for(int i=0 ;i<10;i++)
    {   
    CheckBox tempck=(CheckBox)this.Controls[1].FindControl("ch"+i.ToString());
    if(tempck!=null)
    {
    Response.Write(tempck.ID.ToString());
    }
    if(tempck!=null && tempck.Checked)
    {
    Response.Write(tempck.ID.ToString());
    }

    }
    }
    我认为是if(!IsPostBack)的问题,当button1被click时,由于是PostBack所以将不会创建10个checkbox,自然就获取不了其id。
    改成上面的就可以了。或者改成下面的:
    for(int i=0;i<10;i++)
    {
    CheckBox chTemp = new CheckBox();
    chTemp.ID = "ch" + i.ToString();
    this.Controls[1].Controls.Add(chTemp);

    }
    for(int i=0 ;i<10;i++)
    {   
    CheckBox tempck=(CheckBox)this.Controls[1].FindControl("ch"+i.ToString());
    if(tempck!=null)
    {
    Response.Write(tempck.ID.ToString());
    }
    if(tempck!=null && tempck.Checked)
    {
    Response.Write(tempck.ID.ToString());
    }

    }
      

  3.   

    if(!IsPostBack)
    {for(int i=0 ;i<=10;i++)
    {
     CheckBox cktemp=new CheckBox();
    this.Controls[1].Controls.Add(cktemp);
    cktemp.ID="ch"+i.ToString();
    }
    }
    看看你的代码 ,
    当电击服务器控件 button1时,
    页面回传,
    此时 页面重新构建 ,
    if(!IsPostBack)为false ,不执行
    还哪有什么 checkbox,当然找不到 。。把!IsPostBack删料试试