2012-02-13 13 views
8

Ho un Updatepanel e Gridview al suo interno.Utilizzo di GridView all'interno di UpdatePanel

<asp:UpdatePanel ID="uplPanel" UpdateMode="Conditional" runat="server" OnLoad="uplPanel_Load"> 
<ContentTemplate> 
<asp:GridView ID="gvPrList" runat="server" AutoGenerateColumns="false" AllowPaging="false" 
     AllowSorting="false" CssClass="list-table" HeaderStyle-CssClass="header"> 
     <Columns> 
    <ItemTemplate> 
       <asp:Button ID="btnEdit" runat="server" Text="Edit" CssClass="button save" OnCommand="onPrItemCmd" 
        CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" /> 
       <asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="button save" OnCommand="onPrItemCmd" 
        CommandName="deleteRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 

Quando clicco sul mio pulsanti all'interno del Griview, non fuoco gli eventi. Qualche idea?

risposta

2

Ho fatto la seguente e funziona

pulsante asp sostituisco con pulsante HTML e chiamata JavaScript metodo di sparare Aggiornamento Panal evento Load.

<input id="btnDelete1" type="button" onclick="javascript:DeletePrItem('<%# Eval("ID") %>');" value="Delete" class="button save" style="width: 80px" /> 

mio Js:

function DeletePrItem(_Id) { 
     __doPostBack('<%= uplPanel.ClientID %>', _Id); 
    } 

mio codice dietro:

protected void uplPanel_Load(object sender, EventArgs e) 
    { 
     var arg = Request.Params.Get("__EVENTARGUMENT"); 

     if (arg != null) 
     { 
      if (arg != "") 
      { 
       string recordId = arg.ToString(); 
       //Do deletetion and rebind data grid 

    } 
    } 
} 
4

È necessario aggiungere OnCommand caso di GridView e quindi gestire che all'interno di tale evento come questo:

OnRowCommand="gvPrList_OnRowCommand" 

o in alternativa aggiungere un evento click per il singolo pulsante e quindi gestire nel codice al file:

<asp:Button ID="btnEdit" runat="server" OnClick="btnEdit_Click" Text="Edit" CssClass="button save" 
        OnCommand="onPrItemCmd" CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" /> 
+0

Grazie. Ho già il mio codice dietro il metodo handler per l'evento onPrItemCmd. – Roshe

+0

Hai provato ad aggiungere il gestore di eventi 'onclick' al tuo pulsante e poi controlla se funziona? –

0

Questo sarebbe il gestore di eventi per il vostro comando nel codebehind:

protected void onPrItemCmd(object sender, CommandEventArgs e) 
    { 
     //do whatever you want 
     //probably you will need the "ID" or "CommandArgument": 
     string myArgumentID = e.CommandArgument.ToString(); 

     uplPanel.Update(); //since the UpdatePanel is set *UpdateMode="Conditional"* 
    } 

UPDATE:

Probabilmente, si potrebbe fare un po 'di convalida quando si fa clic sui pulsanti. In tal caso, è necessario aggiungere CausesValidation = "false" nelle proprietà dei pulsanti o dei collegamenti

+0

Ancora affronta lo stesso problema, l'ho provato. – Roshe

+0

@Nilaa si prega di consultare l'aggiornamento nella mia risposta – aleafonso

+0

Sì .. ha provato ancora lo stesso problema – Roshe

0

Si prega di aggiungere questo codice in UpdatePanel.

</ContentTemplate> 
<Triggers> 
    <asp:PostBackTrigger ControlID="gvPrList" EventName="Click" /> 
</Triggers> 
</asp:UpdatePanel> 
+0

Ho ricevuto questo errore: digita 'System.Web.UI.PostBackTrigger' non ha una proprietà pubblica denominata "EventName". Sto usando asp.net 3.5 – Roshe

+0

protected void Fare clic su (oggetto mittente, CommandEventArgs e) {} // creare questo è un evento fittizio e provare – Ruruboy

+0

'System.Web.UI.PostBackTrigger' non ha questa proprietà – Roshe

2

Ho avuto lo stesso problema in cui i pulsanti colonna con un OnClick stavano causando un postback ma il metodo OnClick non è stato in colpire. Quando ho commentato il pannello di aggiornamento e tutto ha funzionato.

ho risolto questo problema con l'aggiunta di un trigger postback per la rete all'interno del pannello di aggiornamento:

</ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="uxWebDataGrid" /> 
    </Triggers> 
</asp:UpdatePanel> 

Spero che questo aiuti qualcun altro!

0

ho aggiunto un OnRowCommand evento e aggiungere questo trigger per l'UpdatePanel:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="gvPrList" EventName="RowCommand" /> 
</Triggers> 

Si noti che si tratta di un trigger Async.

1

Ho avuto un problema simile.

A seconda della situazione, come nel mio ... Tutti i controlli selezionabili all'interno del pannello di aggiornamento Voglio essere trigger; Quindi ero semplicemente in grado di usare la proprietà UpdatePanel 'ChildrenAsTriggers = "true"' per risolvere il problema.

<asp:UpdatePanel runat="server" ID="UPCommunicationlogForm" ChildrenAsTriggers="true" > 

Questo risolto il problema, ora il mio modificare e cancellare i pulsanti che vengono generati dal ItemTemplate dentro la mia GridView chiamare i loro rispettivi metodi sul server.

Problemi correlati