繁体   English   中英

按钮单击事件未触发动态创建的按钮

[英]Button Click event not firing for dynamically created button

我在DropdownListSelectedIndexChanged事件上创建了动态控件。 按钮是其中一个控件。 我还为该按钮分配了事件,但调试器没有进入该click事件。 以下是我的代码。

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            token = Session["LoginToken"].ToString();
            if (!IsPostBack)
            {
                BindData();
                fsSearch.Visible = false;
                btnDownload.Visible = false;
            }
            else
            {
                foreach (HtmlTableRow row in (HtmlTableRowCollection)Session["dynamicControls"])
                {
                    tblSearch.Rows.Add(row);
                }
            }
        }
        catch
        {
        }
    }

    private void BindData()
    {
        ddlReportName.DataSource = svcCommon.GetReports(token, out message);
        ddlReportName.DataValueField = "Key";
        ddlReportName.DataTextField = "Value";
        ddlReportName.DataBind();
        ddlReportName.Items.Insert(0, "--Select--");
    }

    protected void ddlReportName_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string[] reportInfo = ddlReportName.SelectedValue.Split('|');

            Session["dynamicControls"] = null;
            tblSearch.Rows.Clear();

            HtmlTableRow row = new HtmlTableRow();
            HtmlTableCell cellFieldNameLbl = new HtmlTableCell();
            HtmlTableCell cellFieldNameDdl = new HtmlTableCell();
            HtmlTableCell cellOperatorLbl = new HtmlTableCell();
            HtmlTableCell cellOperatorDdl = new HtmlTableCell();
            HtmlTableCell cellValueLbl = new HtmlTableCell();
            HtmlTableCell cellValueTxt = new HtmlTableCell();
            HtmlTableCell cellOperatorRbtn = new HtmlTableCell();
            HtmlTableCell cellAddMoreFilter = new HtmlTableCell();
            Button btnAddMore = new Button();

            DropDownList ddlColumn = new DropDownList();
            DropDownList ddlOperator = new DropDownList();
            TextBox txtValue = new TextBox();
            RadioButtonList rbtnOperator = new RadioButtonList();

            List<string> filterValues = svcCommon.GetSearchColumns(Convert.ToInt64(reportInfo[0]), token, out message);

            fsSearch.Visible = btnDownload.Visible = filterValues.Count > 0 ? true : false;

            ddlColumn.ID = "_ddlColumn0";
            ddlOperator.ID = "_ddlOperator0";
            txtValue.ID = "_txtValue0";
            rbtnOperator.ID = "_rbtnOperator0";
            btnAddMore.ID = "_btnAddMore0";


            rbtnOperator.Items.Add("AND");
            rbtnOperator.Items.Add("OR");
            rbtnOperator.RepeatDirection = RepeatDirection.Horizontal;

            btnAddMore.Text = "Add More";

            btnAddMore.Click +=btnAddMore_Click;

            ddlColumn.DataSource = filterValues;
            ddlColumn.DataBind();

            ddlOperator.DataSource = new List<string>() 
                                        {   
                                            "Equal",
                                            "Not Equal",
                                            "Less Than",
                                            "Less Than Or Equal",
                                            "Greater Than",
                                            "Greater Than Or Equal",
                                            "Start With",
                                            "Not Start With",
                                            "End With",
                                            "Not End With",
                                            "Contains",
                                            "Not Contains",
                                            "Between",
                                            "Not Between",
                                            "In",
                                            "Not In"
                                        };
            ddlOperator.DataBind();

            cellFieldNameLbl.InnerText = "Field Name:";
            cellFieldNameDdl.Controls.Add(ddlColumn);
            cellOperatorLbl.InnerText = "Operator";
            cellOperatorDdl.Controls.Add(ddlOperator);
            cellValueLbl.InnerText = "Value";
            cellValueTxt.Controls.Add(txtValue);
            cellOperatorRbtn.Controls.Add(rbtnOperator);
            cellAddMoreFilter.Controls.Add(btnAddMore);

            row.Cells.Add(cellFieldNameLbl);
            row.Cells.Add(cellFieldNameDdl);
            row.Cells.Add(cellOperatorLbl);
            row.Cells.Add(cellOperatorDdl);
            row.Cells.Add(cellValueLbl);
            row.Cells.Add(cellValueTxt);
            row.Cells.Add(cellOperatorRbtn);
            row.Cells.Add(cellAddMoreFilter);

            tblSearch.Rows.Add(row);
            Session["dynamicControls"] = tblSearch.Rows;
        }
        catch (Exception ex)
        {
        }
    }

    protected void btnAddMore_Click(object sender, EventArgs e)
    {
        try
        {

        }
        catch
        {
        }
    }

在asp.net webforms中动态创建控件的问题是它们不会自动添加到视图状态,因此不会发生回发事件。

这应该有助于您了解动态添加控件,并通过viewstate http://forums.asp.net/t/1900207.aspx?Creating+buttons+dynamically管理它们

或者,更容易管理的方法是在页面上显示按钮但不可见,然后在selected_index_changed事件中,只需将可见性切换为true即可。

我没有足够的时间尝试这么多东西。 我做的事情是存储容器,其中动态控件被添加到SessionPage_Init事件我已绑定事件,它现在工作正常。 :)

暂无
暂无

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

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