2016-07-29 10 views
1

Ich habe eine asp:GridView innerhalb einer asp:UpdatePanel, die eine Spalte von asp:LinkButton Kontrollen hat.LinkButton.Click-Ereignis wird nicht ausgelöst, wenn dynamisch in der GridView-Zeile datengebunden

Beim datengebundenen Ereignis row wird dem LinkButton der Click-Event-Handler zugewiesen.

Ich habe versucht jede Möglichkeit, die ich finden konnte, um den Klick sogar zu verdrahten und keines der Ereignisse jemals Feuer.

Mache ich etwas falsch?

aspx:

<asp:UpdatePanel ID="MainUpdatePanel" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label ID="lblTest" Text="test" runat="server" /> 
     <asp:GridView ID="gvClientsArchive" runat="server" AllowSorting="true" DataSourceID="dsClients" 
      OnRowDataBound="gvClientsArchive_RowDataBound" SkinID="gvList" 
      AllowPaging="true" PageSize="25" Visible="false"> 
     ... 

-Code hinter:

protected void gvClientsArchive_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    ... 
    int company_id = int.Parse(drvRow["company_id"].ToString()); 
    LinkButton lnkRestore = (LinkButton)e.Row.FindControl("lnkRestore"); 
    lnkRestore.Click += new System.EventHandler(this.doRestore); 

Button-Handler-Code:

private void doRestore(object sender, EventArgs e) 
{ 
    lblTest.Text = "restore clicked"; 
} 

Ich habe auch versucht:

protected void gvClientsArchive_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    ... 
    LinkButton lnkRestore = (LinkButton)e.Row.FindControl("lnkRestore"); 
    lnkRestore.Click += delegate 
    { 
     lblTest.Text = "restore clicked"; 
    }; 

Antwort

0

RowDataBound ist ungeeignet, wenn Sie Ereignishandler registrieren möchten. Verwenden Sie RowCreated:

protected void gvClientsArchive_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton lnkRestore = (LinkButton)e.Row.FindControl("lnkRestore"); 
     lnkRestore.Click += new System.EventHandler(this.doRestore); 
    } 
} 

RowDataBound nur ausgelöst wird, wenn Sie das Raster nicht auf jedem Postback Databind, die da alle Kontrollen benötigt wird am Ende der Seite des Lebenszyklus angeordnet sind. Es ist auch zu spät.

Wenn Sie TemplateFields verwenden, ist es einfacher, den Handler deklarativ auf dem aspx zu registrieren.

+0

Ich werde versuchen, das jetzt zu implementieren. Warum ist es unangebracht? –

+1

@JamesWierzba: bereits bearbeitet –

+0

Tim Ich benutze ein 'TemplateField' als Spalte für diese' LinkButton' Zeile. Ich kann sehen, wie man das OnClick im aspx hinzufügt, aber wie würde ich den Kontext für den Rest der Datenzeile im Click-Handler-Event bekommen? –