【问题标题】:how to get Dynamic checkbox control id's如何获取动态复选框控件ID
【发布时间】:2013-09-24 06:57:24
【问题描述】:

我正在动态生成复选框,所有这些都写在 page_load 中,当我尝试检查它显示错误的复选框时,

错误行:

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;
                }

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您为chklbl(均为j.ToString())提供了相同的ID,您需要使它们唯一:

    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);
    

    【讨论】:

    • 我得到了复选框 id,但即使我选中了复选框,显示的 id 也显示为 false
    • 我猜 j 是独一无二的,它会创建多达 1 天的复选框和具有唯一 ID 的标签,因为它处于 for 循环中。
    • @Anandaraj j 如果您只使用一次,它将是独一无二的。在这种情况下,它在同一个循环中使用了两次
    • 我得到了复选框 id,但即使我选中了复选框,显示的 id 也显示为 false
    • @RGraham,是的,我没有看到复选框和标签都使用相同的 j.ToString() 值。你的答案是正确的。
    【解决方案2】:

    您需要在 OnInit 方法中添加动态控件,以便这些控件在所有情况下都能正常工作。我记得在 Page_Load 中添加动态控件时遇到问题。

    RGraham 已经指出了一个错误,将相同的 ID 添加到不同的控件。

    还有,这个说法似乎没有任何目的

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

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 2018-06-04
      • 1970-01-01
      • 2016-01-29
      • 2023-03-04
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      相关资源
      最近更新 更多