Создание динамически созданной кнопки ссылки для запуска события при нажатии

Я использую gridview, и он привязан к таблице данных, поэтому для autogeneratecolumns установлено значение true. Затем я динамически добавил кнопку ссылки в последнюю ячейку строки, и я вижу кнопку ссылки, появляющуюся в представлении сетки. Теперь я не могу связать какое-либо событие с кнопкой. Я хотел бы знать, запускаются ли события при использовании динамически добавляемой кнопки ссылки в представлении сетки с параметром autogeneratecolumns, установленным на true. Вот что у меня есть в моем коде

    protected void btnSearch_Click(object sender, EventArgs e)
{

Datatable retval = // api call to a method. returns valida datatable

    if (retval != null)
    {
        if (retval.Rows.Count > 0)
        {
            GridViewSearchResult.Visible = true;
            GridViewSearchResult.DataSource = retval;
            GridViewSearchResult.DataBind();
    }
    }
}

protected void GridViewSearchResult_RowDataBound(object sender, GridViewRowEventArgs e)
{

    LinkButton lb;
    int j = e.Row.Cells.Count;
    string HeaderText;

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

        lb = new LinkButton();
        lb.Text = "edit";
        //lb.CommandArgument = "edit";
        //lb.CommandName = "edit";
        //lb.Command += LinkButton_Command;
        //lb.Click += new EventHandler(onLinkClick);
        //ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(lb);
        //e.Row.Cells[j-1].Controls.Add(l);
        e.Row.Cells[j-1].Controls.Add(lb);

        lb.Click += new EventHandler(lbtn_Click);

    }

}


protected void GridViewSearchResult_RowCommand(object sender, CommandEventArgs e)
{
    switch (e.CommandName.ToLower())
    {
        case "edit":
            Server.Execute("VerifyContact.aspx");
            break;
        default:
            break;
    }
}
protected void lbtn_Click(object sender, EventArgs e)
{
    //if (e. == "delete")
    {
        Server.Execute("VerifyContact.aspx");
    }
}
protected void LinkButton_Command(object sender, CommandEventArgs e)
{
    if (e.CommandName == "edit")
    {
        LinkButton lb = (LinkButton)sender;
        lb.Text = "OK";
    }
}

и АСП

<div id="searchResultGrid">
        <asp:GridView ID="GridViewSearchResult"  runat="server" 
            OnRowDataBound="GridViewSearchResult_RowDataBound" 
            onselectedindexchanged="GridViewSearchResult_SelectedIndexChanged"
            onRowEditing = "GridViewSearchResult_RowEditing"
            onRowCommand = "GridViewSearchResult_RowCommand">

        </asp:GridView>
    </div>

person CRMCouture    schedule 24.01.2014    source источник


Ответы (1)


Я также не совсем понимаю проблему, с которой вы столкнулись, но что-то не так со старой функцией live(), которая могла обрабатывать динамически генерируемые элементы. Я думаю, что .delegate() справится с этим.

person Liam James    schedule 24.01.2014