web-dev-qa-db-fra.com

Utilisation de GridView dans UpdatePanel

J'ai un Updatepanel et Gridview à l'intérieur.

<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>

Lorsque je clique sur mes boutons dans Griview, les événements ne sont pas déclenchés. Une idée?

8
Gilly

J'ai fait ce qui suit et ça marche

Je remplace le bouton asp par le bouton html et appelle la méthode javascript pour déclencher l'événement Update Panal Load.

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

Mon Js:

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

Mon code derrière:

    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

    }
     }
}
2
Gilly

Vous devez ajouter l'événement OnCommand de GridView, puis gérer cet événement comme suit:

OnRowCommand="gvPrList_OnRowCommand" 

ou bien ajoutez un événement de clic pour le bouton individuel, puis gérez le code derrière le fichier:

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

J'ai eu le même problème où les boutons de colonne avec OnClick causaient une publication mais la méthode OnClick n'était pas touchée. Quand j'ai commenté le panneau de mise à jour et tout a fonctionné.

J'ai résolu ce problème en ajoutant un déclencheur de publication pour la grille dans le panneau de mise à jour:

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

J'espère que ceci aide quelqu'un d'autre!

2
John

J'ai eu un problème similaire.

En fonction de votre situation, comme dans la mienne ... Tous les contrôles cliquables à l'intérieur du panneau de mise à jour seront des déclencheurs. J'ai donc simplement pu utiliser la propriété UpdatePanel 'ChildrenAsTriggers = "true"' pour résoudre le problème.

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

Cela a résolu mon problème. Désormais, mes boutons d'édition et de suppression générés à partir de l'élément ItemTemplate dans mon gridview appellent leurs méthodes respectives sur le serveur.

1
user2784648

Ce serait le gestionnaire d'événement pour votre commande dans le 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"*
    }

METTRE À JOUR:

Vous faites probablement une validation lorsque vous cliquez sur des boutons. Si tel est le cas, vous devez ajouter CausesValidation = "false" dans les propriétés de vos boutons ou de vos liens

0
aleafonso

Veuillez ajouter ce code dans UpdatePanel.

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

J'ai ajouté un événement OnRowCommand et ajouter ce déclencheur à UpdatePanel:

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

Notez que c'est un déclencheur Async.

0
Filipe Leal