2013-09-24 33 views
0

我动态生成的复选框,这一切都写在Page_Load中,当我尝试检查示值误差的复选框,如何让动态CheckBox控件的ID

错误行:

CheckBox cb = (CheckBox)Page.FindControl("chk" + j);

错误:找到具有相同ID'1'的多个控件。 FindControl需要控件具有唯一的ID

我的要求是:

如果我检查我想复选框数算的复选框选中和单选按钮会出现相对选中的复选框。

下面是代码:

 string strfromdt = Session["leavefrm"].ToString(); 
     DateTime startDate = Convert.ToDateTime(strfromdt); 
     string strtodt = Session["leaveto"].ToString(); 
     DateTime endDate = Convert.ToDateTime(strtodt); 

     string strdays = Session["noofdays"].ToString(); 
     float daysf = float.Parse(strdays); 
     float days = (float)Math.Ceiling(daysf); 
     CheckBox chk; 
     Label lbl; 
     RadioButton rd; 

     days++; 

       OleDbCommand cmd; 
       DbConnection.Open(); 
       cmd = new OleDbCommand("select HOL_DATE from IND_HOLIDAYS", DbConnection); 
       OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 


       for (int j = 1; j <= days - 1; j++) 
       { 
        while(startDate <= endDate) 
        { 
         for (int i = 0; i <= dt.Rows.Count - 1; i++) 
         { 
          string strdate = dt.Rows[i]["HOL_DATE"].ToString(); 
          DateTime date = Convert.ToDateTime(strdate); 

          if (startDate == date) 

           startDate = startDate.AddDays(1); 
         } 

         if ((startDate.DayOfWeek == DayOfWeek.Saturday) || ((startDate.DayOfWeek == DayOfWeek.Sunday))) 
         { 
          startDate = startDate.AddDays(1); 
          continue; 
         } 
         break; 
        } 


        chk = new CheckBox(); 
        chk.ID = j.ToString(); 
        chk.AutoPostBack = true; 
        // chk.Checked = true; 
        lbl = new Label(); 
        lbl.Text = startDate.ToString("dd/MM/yyyy"); 
        lbl.ID = j.ToString(); 
        PlaceHolder1.Controls.Add(lbl); 
        PlaceHolder1.Controls.Add(chk); 

        PlaceHolder1.Controls.Add(new RadioButton { }); 

        PlaceHolder1.Controls.Add(new LiteralControl("<BR>")); 

        startDate = startDate.AddDays(1); 



        CheckBox cb = (CheckBox)Page.FindControl("chk" + j); 

        //chk.Checked = CheckBox1Checked; 
        //chk.oncheckedchanged += CheckBox1OnChecked; 

        int chkcount = 0; 
        if (chk.Checked) 
        { 
         chkcount++; 
        } 
        int chkcount1 = chkcount; 
       } 

回答

0

你给同一个ID chklbl(均为j.ToString()),你需要让他们独特:

chk.ID = string.Format("chk{0}", j); 
lbl.ID = string.Format("lbl{0}", j); 
// Now you can FindControl: 
CheckBox cb = (CheckBox)Page.FindControl("chk" + j); 
+0

感谢您的回复...... – appu

+0

我收到复选框ID,但即使我检查了复选框也ID显示检查是错误 – appu

+0

您的解决方案正在工作 – appu

0

您需要在OnInit方法中添加动态控件,以便它们在所有情况下都能正常工作。我记得在Page_Load中添加了动态控件的问题。

有一个错误RGraham已经指出与相同的ID被添加到不同的控制。

此外,还有这种说法似乎并没有什么目的

PlaceHolder1.Controls.Add(新单选按钮{});