当前位置: 首页 > 知识库问答 >
问题:

GridView-动态按钮控制单击事件不触发-有时

方韬
2023-03-14

我在一个页面上有两个GridView,每个GridView都在代码隐藏中被修改为使用RowDataBound进行分组,在RowDataBound中,我为每个分组添加了一个文本框和按钮。该按钮将添加一个单击事件。此外,每个GridView都位于UpdatePanel中。

为了解决RowDataBound项和动态控件的回发问题,我添加了一个简单的响应。重定向到同一页。这段代码可以工作,但按钮会在GridView列表的一半左右停止触发Click事件。在中途标记之后,单击的行为就像是启动回发,而不是触发单击事件,这会产生与删除RowDataBound信息问题相同的结果。

据我所知,没有调用单击事件。这是我的代码。

protected void GridViewRowDatabound(object sender, GridViewRowEventArgs e)
{
        nonPaidCLB.Visible = true;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataRowView drv = (DataRowView)e.Row.DataItem;
            if (tmpCategoryName != drv["Num"].ToString())
            {
                string useTable = "";
                string giftDoorPrize = "";
                if (drv["Table"].Equals("N"))
                {
                    useTable = " - NOT Using Table";
                }
                if (drv["Gift"].Equals("Y"))
                {
                    giftDoorPrize = " - Providing gift or door prize";
                }
                tmpCategoryName = drv["Num"].ToString();
                Table tbl = e.Row.Parent as Table;
                if (tbl != null)
                {
                    GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal);
                    TableCell cell = new TableCell();
                    cell.ColumnSpan = this.GridView.Columns.Count;
                    cell.Style.Add("font-weight", "bold");
                    cell.Style.Add("background-color", "#4382C0");
                    cell.Style.Add("color", "white");

                    TextBox notes2TXTBOX = new TextBox();
                    notes2TXTBOX.ID = "notes2TXTBOX";
                    notes2TXTBOX.Attributes.Add("runat", "server");
                    notes2TXTBOX.Text = drv["Notes"].ToString();
                    notes2TXTBOX.Style.Add("width", "400px");

                    Label payInfoID2TXTBOX = new Label();
                    payInfoID2TXTBOX.ID = "payInfoID2TXTBOX";
                    payInfoID2TXTBOX.Text = drv["PayID"].ToString();
                    payInfoID2TXTBOX.Attributes.Add("runat", "server");

                    Button saveNotes2BTN = new Button();
                    saveNotes2BTN.ID = "saveNotes2BTN";
                    saveNotes2BTN.Text = "Update";
                    saveNotes2BTN.Attributes.Add("runat", "server");
                    saveNotes2BTN.Click += saveNotes2_OnClick;

                    string paidStr = string.Empty;
                    string invoiceReceiptStr = string.Empty;
                    decimal totalCost = 0;
                    totalCost = (Convert.ToInt16(drv["NumAtt"]) - 1) * Convert.ToDecimal(drv["FullF"]) + Convert.ToDecimal(drv["PartF"]) + Convert.ToDecimal(drv["CSPF"]);

                    if (drv["pd"].Equals("Y"))
                    {
                        paidStr = "<strong>PAID</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                        invoiceReceiptStr = " <a href='resendReceipt.aspx?payRegID=" + drv["PaymentInfoID"] + "&totalCost=" + totalCost + "' style='color:white;' >RESEND RECEIPT</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                    }
                    else
                    {
                        paidStr = "<a href='confirmPaid.aspx?payRegID=" + drv["PayID"] + "' style='color:black;' >MARK PAID</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                        invoiceReceiptStr = " <a href='resendInvoice.aspx?payRegID=" + drv["PayID"] + "&totalCost=" + totalCost + "' style='color:WHITE;' >RESEND INVOICE</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
                    }
                    string cspText = "";
                    if (!drv["CSPF"].ToString().Equals("0.0000"))
                    {
                        cspText = ", CSPresenter ($" + Convert.ToDecimal(drv["ConcurSesPresFee"]).ToString("#,##0.00") + ")";
                    }
                    HtmlGenericControl span = new HtmlGenericControl("span");
                    span.InnerHtml = "<a href='/Events/Invoice.aspx?confID=" + conferenceDDL.SelectedValue + "&payID=" + drv["PayID"] + "' target='_blank' style='color:white;' >" + tmpCategoryName + "</a>" + useTable + "" + giftDoorPrize + ",&nbsp;Sponsor Fee: $" + Convert.ToDecimal(drv["PartF"].ToString()).ToString("#,##0.00") + cspText + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + paidStr + invoiceReceiptStr + "<div style='float:right;'>Total: $" + Convert.ToDecimal(totalCost).ToString("#,##0.00") + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOTES:&nbsp;";
                    cell.Controls.Add(span);
                    cell.Controls.Add(notes2TXTBOX);
                    cell.Controls.Add(saveNotes2BTN);
                    cell.Controls.Add(new LiteralControl("</div>"));
                    row.Cells.Add(cell);
                    tbl.Rows.AddAt(tbl.Rows.Count - 1, row);
                }
            }
        }
    }
}

正如我所说,该代码适用于GridView中的前几个项目,但随后它就停止工作了。有什么帮助吗?

共有1个答案

谷永贞
2023-03-14

不能动态添加控件,也不能像现在这样捕捉事件。

您需要将所有ServerControl放在GridView的模板列中。

在GridViewRowDatabound中查找要操作的服务器控件。例如

Button button = (Button)e.Row.FindControl("MyButton");

然后根据逻辑对服务器控件执行任何操作。

 类似资料:
  • 问题内容: 似乎是一个简单的问题,但解决其他问题的方法似乎对我没有用。 试图通过单击按钮来触发AJAX请求,但似乎并未触发。 HTML示例 javascript 问题答案: 您拥有的代码在拨弄中工作得很好。初始页面加载后,按钮是否通过AJAX动态呈现? 用 代替

  • 问题内容: 这是我想做的事情:单击页面上的一个按钮,这又使(2)事情发生: 显示一个ModalPopup,以防止用户按下任何按钮或更改值 在方法后面调用我的代码,完成后隐藏ModalPopup 这是ASP标记: 现在,这是我在C#代码后面的代码: 为什么不起作用?ModalPopup可以完美显示,但是btnSaveData_Click事件从不触发。 更新: 第一个建议对我不起作用。我还尝试了您的第

  • PayPal Checkout按钮点击本身打开PayPal安全窗口,其余工作正常。当客户点击第一个单选按钮时,我想再次打开PayPal安全窗口,即触发点击PayPal结账按钮。如果按钮本身出现在iframe中,而我无法触发该按钮跨域的单击事件,我该怎么做?有没有办法触发签出按钮的点击? 这里是超文本标记语言代码: 和Javascript代码: 编辑:作为一个工作的例子,我会建议这个网站,但这是有点

  • 我找到了其他相关的问题,但没有一个答案实际上解决了我的问题。这个按钮在IE上很好用,但在Chrome上不行。我尝试移除span元素,将按钮放在任何其他标记之外,但仍然触发了两次。这个temple扩展了一个'base.html'文件,代码位于'main'元素中。 HTML: jQuery:

  • 我在一个页面上有几个html控件和一个搜索按钮。当用户在输入控件之外时(即焦点不在输入控件内),如果用户按enter键,我想触发搜索按钮的单击事件。搜索按钮不是按钮,也不在内 目前我正在做这个

  • 问题内容: 我正在创建一个需要一些简单输入的gui应用程序,但是,当我单击JFrame中的按钮时,我正在使用的actionPerformed方法没有被触发/触发(什么也没有发生)。我似乎无法弄清楚我错过了什么(如果有帮助,这是Java的新手)。感谢您的帮助/建议。 这是所有代码: 问题答案: 您需要像这样向按钮组件添加一个动作监听器。