簡體   English   中英

事件處理程序未在動態按鈕單擊時觸發

[英]Event handler not firing on dynamic button click

我有一個帶有onclick事件處理程序的動態創建按鈕。 問題是,當我單擊按鈕時,它不會在代碼隱藏中遇到事件。

protected void gvOrder_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataTable dt = ds.Tables[0];
    DropDownList ddl = new DropDownList();
    TextBox txt = new TextBox();
    int index = 1;

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ddl = e.Row.FindControl("ddlNewO") as DropDownList;
        txt = e.Row.FindControl("txtNewT") as TextBox;
    }
    foreach (DataRow r in dt.Rows)
    {
        string listitem = Convert.ToString(index);
        ddl.Items.Add(listitem);
        index++;
    }
    ddl.SelectedIndex = e.Row.RowIndex;
    if (e.Row.RowIndex == 0)
    {
        ddl.Enabled = false;
        txt.Enabled = false;
    }
    else if (e.Row.RowIndex != 0)
    {
        ddl.Items.Remove("1");
        //Create ED button


        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Button btnED = new Button();
            btnED.ID = "btnED";
            btnED.CssClass = "buttonsmall";
            //btnED.CommandName = "ED";
            btnED.EnableViewState = true;
            btnED.Click += new EventHandler(btnED_Click);
            foreach (DataRow r in dt.Rows)
            {
                btnED.Attributes.Add("ID", r.ItemArray[2].ToString());
            if (r.ItemArray[3].ToString() == "1")
            {
                btnED.Text = "Disable";
            }
            else 
            {
                btnED.Text = "Enable";
            }
            //Add button to grid
            e.Row.Cells[5].Controls.Add(btnED); 
            }   
        }


    }

}
protected void btnED_Click(object sender, EventArgs e)
{
    // Coding to click event
}

所以這里的問題是,當在帖子背面重新創建頁面時 - 沒有更多的按鈕! 需要在每個帖子的頁面上添加動態控件以正確地觸發事件。 但是在你的情況下,在第一次加載時, GridView綁定你將按鈕添加到頁面。 但是在單擊后的帖子后面沒有再次添加按鈕,因為GridView不再是數據綁定。 因此,ASP.NET無法派生事件的來源,並且壓制它。

修復此處是將GridView與每個帖子上的數據綁定。 字面上,如果你有if (!IsPostBack) - 刪除它。 或者您可以在模板字段中添加按鈕並使用可見性 - 也可以是一種方法。

你需要在Row Created上添加一個點擊處理程序而不是數據綁定我相信。

protected void gvOrderRowCreated(object sender, GridViewRowEventArgs e)
{
    switch (e.Row.RowType) {
        case DataControlRowType.DataRow:
            Button btn = (Button)e.Row.FindControl("btnED");
            btn.Command += btnED_Click;
            break;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM