如何仅为foreach循环中的特定控件触发事件处理程序

时间:2012-03-28 13:56:40

标签: asp.net checkbox foreach

你好我在foreach循环中设置了一些复选框并将它们添加到页面控件中!我还为它们分配了一个事件处理程序并将它们传递给我自己的参数。

当复选框的checkedchanged事件触发时,它会为我添加的所有复选框调用该事件处理程序这可能是因为我为每个循环分配了事件处理程序,所以每当事件触发时它会触发所有复选框!我希望它只被触发一次,即仅用于检查已更改的复选框。

请帮助我如何解决问题 代码段可以帮助您理解

CheckBox checkboxtemp;

foreach (SPListItem item in list.Items)
        {
            checkboxtemp = new CheckBox();
            checkboxtemp.ID = "CheckBoxId" + item.ID;
            checkboxtemp.Text = item.Title;
            checkboxtemp.AutoPostBack = true;
            checkboxtemp.CheckedChanged += new EventHandler((sender, e) => checkboxtemp_CheckedChanged(sender, e, checkboxtemp.Text));
            Controls.Add(checkboxtemp);
        }

并且为每个复选框触发的事件处理程序为

protected void checkboxtemp_CheckedChanged(object sender, EventArgs e, string fieldName)
    {
      Label1.Text = fieldName;
    }

无论选中哪个复选框。我总是在checkboxtemp_CheckChanged事件处理程序中获取fieldName参数中的最后一个复选框文本值。即,当任何复选框状态被更改时,foreach循环中的事件处理程序将被调用每个项目。 我知道我做错了什么但是无法弄清楚

请帮忙

1 个答案:

答案 0 :(得分:0)

试试这个

删除

<德尔>     CheckBox checkboxtemp;
foreach (SPListItem item in list.Items)
        {

            var checkboxtemp = new CheckBox();