如何在ASP.net中选中/取消选中动态创建的复选框

时间:2014-08-26 15:20:56

标签: c# asp.net checkbox

我有这段代码:

 public void CreateCheckBox(int i)
 {
      foreach (ListItem item in listItems.Items)
      {
          CheckBox box = new CheckBox();

          box.Enabled = true;
          box.AutoPostBack = true;
          box.EnableViewState = true;
          box.ID = string.Format("Active_{0}", item.Value);
          box.Text = "Active";
          box.CssClass = "checkbox_format2";

          if (chkSetAllActive.Checked)
          {
              box.Checked = true;
              box.CheckedChanged += new EventHandler(CheckedChange);
          }
          else
          {
             box.Checked = false;
             box.CheckedChanged += new EventHandler(CheckedChange);
          }
          PlaceHolder1.Controls.Add(box);
}

protected void CheckedChange(object sender, EventArgs e)
{
        CheckBox x = (CheckBox)sender;
        if (chkSetAllActive.Checked)
            x.Checked = true;
        else
            x.Checked = false; 
}

并在PageLoad()我称之为

CreateCheckBox(listItems.Items.Count);

我还有另一个复选框(chkSetAllActive)。

问题: 当我单击此复选框(chkSetAllActive.Checked = true)时,正在检查所有动态创建的复选框(活动),但是当我想取消选中所有(chkSetAllActive.Checked = false)时,此动态创建的复选框保持选中状态。我想动态创建的控件存在一些问题。

如果有人有一些想法,我会很感激。

这里也是照片样本:

enter image description here

1 个答案:

答案 0 :(得分:2)

首先,从box.Checked = ...中移除CreateCheckBox代码。它不属于那里。即使未单击chkSetAllActive - CheckBox,您也将修改回发时的Checked-state。

您应该以这种方式处理CheckedChanged的{​​{1}}事件:

chkSetAllActive

修改:非LINQ

var allChk = PlaceHolder1.Controls.OfType<CheckBox>()
    .Where(chk => chk.Text == "Active"); // to avoid problems
foreach(CheckBox chk in allChk)
    chk.Checked = chkSetAllActive.Checked;