如何通过选中获取动态复选框控件ID是真的吗?

时间:2013-09-24 07:57:43

标签: c# asp.net

我正在动态生成复选框,所有这些都写在page_load

我的要求是:

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

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

即使我选中了cd显示checked = false

的复选框

下面是代码:

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

1 个答案:

答案 0 :(得分:0)

您正在搜索不存在的ID。

首先,您将控件的Id设置为数字(j),稍后您将尝试通过搜索“chk”+数字j来找到它。

这里有2个选项:

chk.ID = j.ToString();更改为chk.ID ="chk" + j.ToString();

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

我个人会选择第一个选项,因为用一个数字命名一个控件不是一个好主意。

<强>更新

for (int j = 1; j <= days - 1; j++)
{
    ...

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

    //No need fot this. You still have the object chk from a few lines above
    // CheckBox cb = (CheckBox)Page.FindControl("chk" + j);

    //If you want to use this, put these lines before you add the control.
    //chk.Checked = CheckBox1Checked;
    //chk.oncheckedchanged += CheckBox1OnChecked;

    //You should declare this outside the for-loop or even outside the method 
    //if you want to use it elsewhere
    int chkcount = 0;

    //Here you are using the correct object.
    //chk.Checked should reflect exactly what you've set above.
     if (chk.Checked)
    {
        chkcount++;
    }
    int chkcount1 = chkcount;
}