Использование GridView внутри UpdatePanel

У меня есть Updatepanel и Gridview внутри него.

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

когда я нажимаю на свои кнопки внутри Griview, он не запускает события. Есть идеи?

7 ответов


вам нужно добавить OnCommand событие GridView, а затем обработайте это внутри этого события следующим образом:

OnRowCommand="gvPrList_OnRowCommand" 

или альтернативно добавьте событие click для отдельной кнопки, а затем обработайте код за файлом:

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

Я сделал следующее, И это работает

я заменяю кнопку asp на кнопку html и вызываю метод javascript для запуска события загрузки панели обновления.

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

Мой Js:

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

мой код :

    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

    }
     }
}

У меня была та же проблема, когда кнопки столбцов с OnClick вызывали обратную передачу, но метод OnClick не был поражен. Когда я прокомментировал панель обновления, и все это сработало.

Я решил эту проблему, добавив триггер обратной передачи для сетки в панели обновления:

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

надеюсь, это поможет кому-то еще!


У меня была аналогичная проблема.

в зависимости от вашей ситуации, как и в моей...Все интерактивные элементы управления внутри панели обновления я хочу быть триггерами; поэтому я просто смог использовать свойство UpdatePanel 'ChildrenAsTriggers= "true"', поэтому решите проблему.

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

это решило мою проблему, теперь мои кнопки редактирования и удаления, которые генерируются из ItemTemplate внутри моего gridview, вызывают их соответствующие методы на сервере.


пожалуйста, добавьте этот код в UpdatePanel.

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

Это будет обработчик событий для вашей команды в 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"*
    }

обновление:

Вероятно, вы можете выполнять некоторую проверку при нажатии на кнопки. Если это так, вам нужно добавить CausesValidation= "false" в ваших кнопках или ссылках свойства


Я добавил событие OnRowCommand и добавил этот триггер в UpdatePanel:

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

обратите внимание, что это асинхронный триггер.