在RowDatabound中创建的按钮不会触发单击事件

时间:2011-07-01 07:40:56

标签: asp.net gridview

我在gridview RowDataBound事件中添加了LinkBut​​ton,这里我也在点击事件

        protected void cgvProjectPropertyList_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        LinkButton lnkDelete = new LinkButton();
        lnkDelete.Text = "Delete";
        e.Row.Cells[COL_INDEX_DELETE].Controls.Add(lnkDelete);
        lnkDelete.CommandName = "Delete";

        lnkDelete.Click += new EventHandler(lnkDelete_Click);
    }
}

void lnkDelete_Click(object sender, EventArgs e)
{

}

lnkDelete_Click事件无效。

感谢。

4 个答案:

答案 0 :(得分:1)

问题是由于您动态添加LinkButton控件,这在ASP.NET WebForms中非常痛苦。

为了使ASP.NET中的事件能够工作,控件必须在Load事件之后存在,因为那是触发控制事件的时候。否则,没有任何Linkbutton将click事件绑定到。

我的建议是您尝试在标记中添加LinkButton。它会为你节省很多痛苦。然后,您可以使用RowCommand上的GridView代替。

如果这不是一个选项,则必须在Load事件中添加Linkbutton并在其中为其click事件注册处理程序。

我有post正在使用ListView,正在使用此方法。你应该能够从中吸取教训。

答案 1 :(得分:0)

尝试将public放在void lnkDelete_Click(object sender, EventArgs e)

前面

有时会出现一些问题

答案 2 :(得分:0)

您可以使用RowCommand代替..

 protected void cgvProjectPropertyList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
      e.CommandArgument // will Return current Row primary key value, rather row Index
    }
}

您需要确保在GridView OnRowCommand="cgvProjectPropertyList_RowCommand"

中注册该事件

答案 3 :(得分:0)

问题是您在gridview的RowDataBound事件中添加了LinkBut​​tons。但是当页面在点击链接按钮时回发时,它们还没有被重新创建,因此页面没有任何内容可以将点击事件绑定到。如果它是回发,您将需要在PreRender事件中再次创建它们。因此,您可能还需要存储一些用于确定如何在ViewState中创建LinkBut​​tons的信息,以便您可以在PreRender中重新创建它们。执行此操作后,控件将可用于页面以将事件绑定到,并且将处理您的处理程序。