簡體   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