我有这段代码:
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
)时,此动态创建的复选框保持选中状态。我想动态创建的控件存在一些问题。
如果有人有一些想法,我会很感激。
这里也是照片样本:
答案 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;