繁体   English   中英

复选框会触发多个事件

[英]Checkbox fires more than one event

我有一个动态选项卡,其中有复选框。 我在他们身上放了一个事件onCheckedChanged 它第一次起作用,但是回发后,重新创建了我的选项卡,当我单击另一个复选框时,触发了多个事件。

这是创建标签的代码:

private void initCatalog()
        {
            foreach (Article art in listArticle)
            {
                TableRow ligne = new TableRow();
                ligne.Width = Unit.Percentage(100);

                TableCell celluleITMREF = new TableCell();
                celluleITMREF.Width = Unit.Percentage(10);
                celluleITMREF.Text = art._ITMREF;

                TableCell celluleCBOX = new TableCell();
                celluleCBOX.Width = Unit.Percentage(8);

                CheckBox cbox = new CheckBox();
                cbox.ID = "cbox." + f._FOURNISSEUR + "." + art._ITMREF;
                cbox.Checked = hfArticlesPaniers.Value.Contains(cbox.ID);
                //cbox.Enabled = !(hfArticlesPaniers.Value.Contains(cbox.ID));
                cbox.CheckedChanged += new EventHandler(cbox_CheckedChanged);
                cbox.AutoPostBack = true;
                cbox.CssClass = "c";

                celluleCBOX.Controls.Add(cbox);
                ligne.Cells.Add(celluleITMREF);
                ligne.Cells.Add(celluleCBOX);

                tabArticle.Rows.Add(ligne);
            }
        }

这是复选框的事件:

protected void cbox_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox c = sender as CheckBox;

            Response.Write("<script>alert(\"" + c.ID + "\");</script>");
        }

这是page_Load事件:

protected void page_Load(object sender, EventArgs e){
       this.initCatalog();
}

谢谢你的帮助 :)

的每次迭代artlistArticle将导致事件处理程序由线被添加到事件

  cbox.CheckedChanged += new EventHandler(cbox_CheckedChanged);

每次执行。 (即您要多次添加处理程序)

另外,如果未破坏页面并在其间再次加载,则每次运行initCatalog也会导致此情况。

将以上行移动到页面加载后仅执行一次的位置。

编辑

在重新读取代码时,由于有多个复选框,因此可能希望在循环中添加多次。 但是在回发之后,可以再次执行initCatalog() ,从而再次添加事件吗?

我发现了错误。 我有一种方法可以在创建她后对列表进行排序...我删除了该方法,它可以正常工作。

我不知道为什么会出错...

private void orderCatalog()
        {
            var tab = from TableRow tr in tabArticle.Rows
                      orderby tr.Cells[1].Text
                      select tr;

            List<TableRow> l = new List<TableRow>();

            foreach (TableRow tr in tab)
            {
                l.Add(tr);
            }

            tabArticle.Rows.Clear();

            foreach (TableRow tr in l)
            {
                tabArticle.Rows.Add(tr);
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM