2

我正在动态创建一堆复选框:

CheckBox chkRead = new CheckBox();
chkRead.ID = "chk1";
chkRead.AutoPostBack = true;
chkRead.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);

CheckBox chkPost = new CheckBox();
chkRead.ID = "chk2";
chkPost.AutoPostBack = true;
chkPost.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);


 protected void CheckBox_CheckedChanged(object sender, EventArgs e)
 {
     CheckBox chk = (CheckBox)sender;


 }

我想要做的是以下内容:当我检查chkPost CheckBox 我希望chkRead CheckBox 也被检查

CheckBox_CheckedChanged事件中,我只能访问被单击的 CheckBox,但我不知道如何检查该事件中的另一个复选框。

4

4 回答 4

3

这是来自记忆,但您可以执行以下操作:

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chk = (CheckBox)sender;
    CheckBox chkPost = (CheckBox) chk.NamingContainer.FindControl("chk2");
    CheckBox chkRead = (CheckBox) chk.NamingContainer.FindControl("chk1");
    if(chk == chkPost && chk.Checked)
    {  
        chkRead.Checked = true;
    }
} 

这是假设您想在回发后在代码隐藏中执行所有这些操作。如果你想用javascript来做,那是一个不同的问题。

这也假设chk1chk2在同一个命名容器中。如果不是,事情就会变得复杂。

于 2012-11-14T17:38:27.050 回答
2

由于是您的代码创建了复选框,因此您可以将它们的引用存储在列表或字典中,并在需要时通过 id 检索它们。

于 2012-11-14T17:38:23.137 回答
0

如果您想动态执行此操作,您可以向您感兴趣的复选框添加一个属性 - 然后您可以遍历 Page.Controls 集合并测试您循环的控件是否具有该属性,然后您可以检查,或者取消选中它。

一些伪代码:

foreach(var control in Page.Controls)
  if(typeof(Control) is CheckBox and ((CheckBox)control).Attributes["myAttr"] != null)
     //check or uncheck it

在阅读您关于嵌套控件的评论时(这可能有点麻烦),我倾向于同意 Igor 的观点,即您应该将 id 放在一个集合中,因为它们是动态添加的。

于 2012-11-14T17:38:48.660 回答
0

您可以在创建这些复选框的位置粘贴代码吗?是“OnInit”还是其他地方?您是将这些复选框放入容器中,您是将这些控件存储为全局变量还是在方法中创建它们?

于 2012-11-14T18:43:00.807 回答